ich würde gerne für ein etwas größeres Projekt cmake benutzen, komme aber momentan mit der CMakeLists.txt nicht klar. Die Struktur in meinem Projekt-Verzeichnis sieht grob so aus:
In meiner CMakeLists.txt habe ich die einzelnen Verzeichnisse mit "add_subdirectory()" eingetragen und in einer "target_link_libraries()" alle Libraries der einzelnen Module angegeben.
In jedem Modul-Verzeichnis existiert eine weitere CMakeLists.txt Datei mit dem folgenden Eintrag:
Code:
add_library ( modulX SHARED modulX.cpp )
Das funktioniert mit SHARED super. Aber wenn ich ein STATIC draus mache kann der Linker später die einzelnen Teile (die aber schon als modul1.a statt modul1.o angelegt werden) nicht mehr zusammen führen da die ganzen Methoden in den Libraries nicht mehr gefunden werden. Also was ich machen möchte ist, entweder das Programm mit shared Libraries kompilieren, oder halt als ein großes statisches Programm das man so als Binärdatei weitergeben kann.
Ich bin aber auch zu blöd im Internet was brauchbares zu finden was mir weiter hilft.
du solltest die cmake-Sachen groß schreiben (ist später lesbarer) und ansonsten gibt es noch den Befehl "LINK_DIRECTORIES" - in dem du angeben kannst, wo er nach Bibliotheken suchen soll. imho gibts das auch als "TARGET_LINK_DIRECTORIES" um es für bestimmte targets anzugeben.
Weiterhin ist es sinnvoll, eigene Bibliotheken zuerst anzugeben, und dann erst die "externen" - sonst spinnt cmake teilweise mit den Pfaden (evtl reicht die Reihenfolgeänderung schon aus damit ers "checkt")
Ansonsten poste einfach mal deine CMakeLists.txt und eine aus den Unterverzeichnissen
Außerdem ist wichtig: cmake 2.4 oder 2.6? 2.6 ist deutlich mächtiger
# FIND_PACKAGE(Boost 1.34 COMPONENTS program_options thread) #IF(NOT Boost_FOUND) # MESSAGE(FATAL_ERROR "Benoetige mindestens die Boost Header in Version 1.34!") # MESSAGE(STATUS "Benoetige mindestens die Boost Header in Version 1.34!") #ENDIF(NOT Boost_FOUND)
#shared_libs IF(MAKESTATIC) MESSAGE(STATUS "=======> Erzeuge Binary mit statischen Libraries <=======") SET(BUILD_SHARED_LIBS OFF) target_link_libraries( TEST data com manager ctrl store parse tools m xml2 boost_thread ) ELSE(MAKESTATIC) target_link_libraries ( TEST data com manager ctrl store parse tools m xml2 boost_thread ) ENDIF(MAKESTATIC)