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
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.
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?!
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.
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.
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é
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...
Habe es nun geschafft: Ich habe die Ordner nun mit include_directory eingebunden. Ich dachte zuerst, dass add_subdirectory reicht
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.