CMake - Gibt es denn keinen vernuenftigen Weg, externe Libraries hinzuzufuegen?
-
Frage im Titel. Mir bekannte Wege:
- find_package
- add_subdirectory
- ExternalProject_Add
Keiner davon funktioniert fuer mich ordentlich.
find_package faellt schon mal raus, weil ich die Libs als git submodule haben moechte, was auch der einzige Weg ist, das ganze Plattformunabhaengig hinzubekommen. (Windows bringt z.B. keine zlib mit)
add_subdirectory exposed die ganzen Settings der Libs an den User meines Projekts. Ausserdem kann eine Lib mit beschissenen CMake Files, wie z.B. zlib mir einfach targets fuer examples erzeugen, die ich eben nicht will.
ExternalProject_Add schmeisst alles ueber Board und erfordert, dass ich die ganzen Targets manuell adde, was bedeutet ich muss die ganzen Build-Pfade irgendwie detecten und manuell hinzufuegen. Baeh.Gibts denn nix besseres? Kann doch nicht sein?
Der Kellerautomat
-
Das wäre jetzt keine reine CMake Lösung und ich weiß nicht, ob das für dich akzeptabel ist.
Aber es gibt Tools wie bspw. biicode.com.
Deine CMakeLists.txt kümmert sich dann nur noch um so Sachen wie configure_file und Compiler Optionen, der Rest erledigt biicode für dich.
ES buildet automatisch deine Bibliotheken und alle Dateien mit main() mitsamt ihren ermittelten Abhängigkeiten. Externene Bibliotheken müssen nur includeded werden, das Tool erkennt sie, lädt alle für das verwendete incldue benötigten Files herunter, builded sie lokal und linkt sie dazu.
-
Na ich weiss nicht. Ich haette grundaetzlich nichts gegen weitere Tools, aber sobald andere Leute meinen Code kompilieren koennen sollen, ist jede Dependency mehr ein Problem...
-
aber sobald andere Leute meinen Code kompilieren koennen sollen, ist jede Dependency mehr ein Problem...
Sehe ich auch so ...
Ist scheinbar aber nicht Standard, wenn man mal betrachtet, was manche pissige Libs für Abhängigkeitsanforderungen mitbringen ^^
Der Trend geht gefühlt eher in richtung "Für jede Bibliothek ein eigenes Buildtool"ExternalProject_Add
kenn ich gar ned ^^ muss ich mir mal anschauen was das macht
add_subdirectory
Man muss hier verstehen, wie cmake die Welt sieht.
mit add_subdirectory erzeuge ich ein vom aktuellen Projekt abhaengiges unterprojekt. Klar das dann alle Variablen und Einstellungen nach unten vererbt.
Wenn man eine externe statische Lib zubauen will, ist das weniger das problem, weil zusätzliche abhaengigkeiten nicht zugelinkt werden.
Bei ner dll hingegen schon eher.
Dort sind aber exe und dll aber auch eher gleichberechtigt.
Also in dem Exe projekt die dll per add_subdirectory hinzufügen bildet das nicht ab.Wir haben das "gelöst" mit einem cmake Metaprojekt, was per add_subdirectory die exe und auch die dll hinzufügt
Aktuell war damals cmake 2.8
Hatte nelängere C++ Pause durch kurzen Urlaub im Java Umfeld.
Hoffe das ist bei 3.x immer noch so
Und bei den Builddependencies denk ich doch immer wehmütig an das Java Projekt zurück. Da iss c++ (auch technisch bedingt) doch ne ganze Ecke hintendran.Ciao ...