2012-04-03 10 views
8

Ich habe kürzlich mein Qt Projekt von qmake zu CMake portiert. Mein Hauptprogramm enthält einen Wert, der von einer #define Direktive abhängt.Wie erstellt man ein Programm mit 2 verschiedenen Werten einer Variablen in CMake

Ich möchte angeben, dass Richtlinie extern über CMake definieren und 3 unterschiedlich benannte Versionen der gleichen ausführbaren Datei erstellen.

Wie soll ich das machen?

Ich habe set_target_properties gesehen, aber das funktioniert nur für Bibliotheken und nicht für ausführbare Dateien.

Zum Beispiel möchte ich, dass das folgende Programm,

int main() 
{ 

    cout << BUILDTYPE << endl; 
} 

es in 3 verschiedenen Geschmacksrichtungen kompiliert (3 Programme), basierend auf dem BUILDTYPE "define" Zum Beispiel in meinem CMakeLists.txt I

add_executable(myAppV1 -DBUILDTYPE=1) 
add_executable(myAppV2 -DBUILDTYPE=2) 
add_executable(myAppV3 -DBUILDTYPE=3) 
angeben möchten

aber das ist nicht die richtige Syntax. Ein Tipp? und ich bekomme 3 ausführbare Dateien, die Drucke

Antwort

9

Sind Sie sicher, dass set_target_properties nicht funktioniert? Wie wäre es dieses:

set_target_properties(myAppV1 PROPERTIES COMPILE_FLAGS "-DBUILDTYPE=1") 

oder:

set_target_properties(myAppV1 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=1") 

Auf meinem Rechner funktioniert es:

add_executable(myAppV1 main.cpp) 
add_executable(myAppV2 main.cpp) 
set_target_properties(myAppV1 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=1") 
set_target_properties(myAppV2 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=2") 
+0

Vielen Dank! Ich habe die set_target_properties nach dem add_executable zu bewegen und es in der zweiten Version verwenden Sie add_executable (myAppv1 main.cpp) set_target_properties (myAppV1 ​​PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE = 1") aber nicht auf diese Weise add_executable schrieb (myAppv1 main.cpp) set_target_properties (myAppV1 ​​EIGENSCHAFTEN COMPILE_DEFINITIONS "-DBUILDTYPE = 1") – linello

0

könnte eine andere Art und Weise sein:

mkdir two directory 
buildflavor1 
buildflavor2 

Im ersten Unter Verzeichnislauf:

cmake -DFLAVOR=OPTION1 .. 

im zweiten Lauf:

run cmake -DFLAVOR=OPTION2 .. 

So zwei ausführbare Datei mit demselben Namen in verschiedenen Zusammenstellung Flagge mit eigenem ist Feature .o und so weiter.