Forum: PC-Programmierung Verständnisfrage CMake


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Christian (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mich in der letzten Zeit etwas mit CMake beschäftigt. Die 
ersten kleinen Projekte liefen auch ohne größere Hürden. Nun bin ich in 
einem Projekt, bei dem ich mehrere Compilerflags einstellen muss. Diese 
habe ich denn per Set() oder auch mit add_definitions() eingefügt und 
konnte dann gesehen, dass die Flags beim Compilieren verwendet wurden. 
Nun habe ich sie aber nicht im generierten Makefile gefunden, genau wie 
die Angabe des Compilers, diese steht ja in der CMakeCache.txt.
Das heisst nun, dass ich das generierte Makefile nur bei mir auf dem 
Rechner nutzen kann, bzw auf einem Rechner wo die Pfade identisch sind?!

Gruß Christian

von Kaj (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Christian schrieb:
> Das heisst nun, dass ich das generierte Makefile nur bei mir auf dem
> Rechner nutzen kann, bzw auf einem Rechner wo die Pfade identisch sind?!
Ist das bei einem handgeschriebenen Makefile, mit fest eingetragenen 
Pfaden anders? Auf einem anderen Rechner fuehrst du einfach wieder CMake 
aus und alles ist gut.

von Christian (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Kaj schrieb:
> Auf einem anderen Rechner fuehrst du einfach wieder CMake
> aus und alles ist gut.

Ok dann sollte wohl jeder, der an diesem Projekt mitarbeitet auch CMake 
installiert haben.
Mein erster Eindruck war der, dass ich mit CMake ein Makefile erstelle 
und das verteilen kann. Dies funktionier aber nicht, da ja im Makefile 
Abhänghigkeiten zu CMake sind?!

von Rolf M. (rmagnus)


Bewertung
2 lesenswert
nicht lesenswert
Christian schrieb:
> Kaj schrieb:
>> Auf einem anderen Rechner fuehrst du einfach wieder CMake
>> aus und alles ist gut.
>
> Ok dann sollte wohl jeder, der an diesem Projekt mitarbeitet auch CMake
> installiert haben.

Ja, und jeder, der das Programm bauen soll.

> Mein erster Eindruck war der, dass ich mit CMake ein Makefile erstelle
> und das verteilen kann. Dies funktionier aber nicht, da ja im Makefile
> Abhänghigkeiten zu CMake sind?!

CMake führt ja auch die ganze Suche nach Abhängigkeiten von z.B. Libs 
u.s.w. durch. Das Makefile nutzt dann das, was bei dieser Suche gefunden 
wurde. Das Makefile ist also immer nur für die Maschine gedacht, auf der 
du zuvor CMake ausgeführt hast.

von tictactoe (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Christian schrieb:
> Mein erster Eindruck war der, dass ich mit CMake ein Makefile erstelle
> und das verteilen kann.

Nein, das funktioniert anders: Jeder Entwickler, der am Code arbeitet, 
führt bei sich cmake aus und erhält dadurch seine eigenen Makefiles.

von René H. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
tictactoe schrieb:
> Nein, das funktioniert anders: Jeder Entwickler, der am Code arbeitet,
> führt bei sich cmake aus und erhält dadurch seine eigenen Makefiles.

Das ist so. Du checkst in ein SVN oder GIT auch nur das CMakeLists.txt 
ein.

Für Abhilfe gegen feste Pfade kannst Du eigene find_package scripts 
schreiben.

Aber generell, cmake ist nur ein Meta Makefile, das Makefile muss von 
jedem Entwickler selber erzeugt werden (das ist der Standard heute).

Grüsse,
René

von Christian (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hinweise!

Nun habe ich dann doch noch eine Frage. Kurzes Beispiel mit folgender 
Struktur: In meinem src Ordner sind die Files main.c, main.h und data.h. 
Im src Ordner ist noch ein Ordner namens app. In diesem sind die Files 
app.c und app.h.
Nun hab ich in jedem Ordner eine CMakeLists.txt, Makefile generiert und 
die erzeugte exe konnte ich ausführen. Soweit alles gut. Dann habe ich 
data.h ( src Ordner ) in die app.h ( app Ordner ) includiert und nun 
kommt beim Bauen die Fehlermeldung: app.h:1:19: fatal error: data.h: No 
such file or directory

Das bedeutet, dass er data.h nicht in dem übergeordnetem Ordner 
findet/kennt. Generell muss aber data.h bekannt sein, da es auch in main 
includiert ist.
Die Ordner src und src/app habe ich per add_subdirectory() bekannt 
gemacht ( das übergeordnete CMakeLists.txt liegt noch vor dem src 
Ordner, da ich auch noch libs einbinde ).
Hoffe das Problem ist deutlich genug beschrieben...

von Christian (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Habe es nun geschafft: Ich habe die Ordner nun mit include_directory 
eingebunden. Ich dachte zuerst, dass add_subdirectory reicht

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.