2016-05-30 14 views
0

Diese Frage bezieht sich auf CMake-Konfigurationsdateien einrichten, so dass sowohl einfache Benutzer als auch Co-Entwickler dienen.automatisch generierte Quellen und Cmake-Konfiguration: Entwickler Build vs Benutzer Build

Beide Benutzergruppen müssen kompilieren. Der Unterschied zwischen ihnen besteht darin, dass Co-Entwickler vor dem Kompilieren eine Reihe von Codegeneratoren oder Konvertern wie flex/bison, swig oder pod2man ausführen werden. Diese Werkzeuge sollen nicht mit unserem Quellpaket geliefert werden, sondern als externe Abhängigkeiten benötigt werden. Einfache Benutzer sollten jedoch mit dem gesamten automatisch generierten Code versehen werden, so dass sie kein anderes Tool als cmake, make und einen Compiler installieren und ausführen müssen.

Nun ist die Frage: Wie der Haupt CMakeLists.txt, so dass bei cmake wir nur kompilieren einzurichten, während auf cmake <expert flag> alle Hilfsmittel erforderlich sind und laufen? Als offensichtliche Verfeinerung sollten feinkörnigere Flags es erlauben, einzelne Werkzeuge ein- oder auszuschalten.

+0

Wenn Sie nicht planen, die Codegeneratoren oder Konverter mit dem Quellpaket für "normale Benutzer" zu verteilen, könnten Sie dies als Unterscheidungsmerkmal verwenden. Überprüfen Sie einfach die Existenz der Werkzeuge oder ihrer Unterverzeichnisse. Die Hauptfrage wäre, wie Sie die Ausgabe der Codegeneratoren oder -konverter liefern (die normalerweise in den binären Ausgabeverzeichnissen für "Mitentwickler" landen)? Wenn Sie keine doppelten Dateien (ausgeliehen und generiert) haben möchten, können Sie die Ausgaben als Zip hinzufügen und sie während der Generierung der Build-Umgebung in die binäre Ausgabe extrahieren. – Florian

+0

@Florian: Menschen sollten frei sein, die Rollen zwischen Benutzer und Entwickler zu wechseln; das Vorhandensein von Werkzeugen sollte nicht automatisch ihre Verwendung auslösen. Im zweiten Teil Ihres Kommentars werfen Sie ein wichtiges Problem auf: In welchem ​​Verzeichnis sollte der automatisch generierte Code enthalten sein? –

Antwort

3

So einfach wie

option(DEVELOPER_MODE "This will run developer tools during build" OFF) 

... 

if(DEVELOPER_MODE) 
add targets for flex and stuff 
endif() 

Jetzt Build mit cmake -D DEVELOPER_MODE=YES .. konfigurieren es zu aktivieren.

+0

Danke. Ich akzeptiere, da meine Frage nicht klar genug war, um eine detailliertere Antwort zu erwarten. Ich sehe immer noch nicht klar, wie man Source vs Build-Verzeichnisse organisiert, da automatisch generierte Dateien die Quelle für einen Benutzer sind, aber in 'Build' für einen Entwickler gehören. Ich werde wahrscheinlich eine separate Frage dazu stellen. –

+1

Beim Generieren dieser Dateien können Sie '$ {CMAKE_CURRENT_SOURCE_DIR}/out.file' als Ausgabedateiname verwenden. – arrowd