CMake

2012-04-03 22 views
8

'daki bir değişkenin 2 farklı değeri ile bir program nasıl oluşturulurprojemi'dan CMake'a taşıdım. Ana programım, #define yönergesine bağlı bir değer içeriyor.CMake

Yönergenin CMake aracılığıyla harici olarak tanımlanmasını ve aynı yürütülebilir dosyanın 3 farklı adlandırılmış sürümünü oluşturmayı belirtmek istiyorum.

Nasıl yapmalıyım?

set_target_properties'u gördüm ancak bu yalnızca yürütülebilir dosyalar için değil, kitaplıklar için çalışır.

Örneğin aşağıdaki program

int main() 
{ 

    cout << BUILDTYPE << endl; 
} 

ben

add_executable(myAppV1 -DBUILDTYPE=1) 
add_executable(myAppV2 -DBUILDTYPE=2) 
add_executable(myAppV3 -DBUILDTYPE=3) 
belirtmek istediğiniz benim CMakeLists.txt Örneğin BUILDTYPE "define" dayalı 3 farklı tatlar (3 yürütülebilir) 'de derlenmiş bunu istiyorum

fakat bu doğru sözdizimi değil. Bazı ipucu? ve ben

cevap

9

yazdırılan 3 adet çalıştırılabilir dosya aldım set_target_properties'un çalışmadığından emin misiniz? Çalışır benim makinede

set_target_properties(myAppV1 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=1") 

:

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

ya:

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

Teşekkür ederiz! Ben add_executable sonra set_target_properties taşımak ve yazdığın ikinci sürümü add_executable (myAppv1 main.cpp) set_target_properties (myAppV1 ​​ÖZELLİKLERİ COMPILE_DEFINITIONS "BUILDTYPE = 1") ama DEĞİL bu şekilde add_executable (myAppv1 kullanmak zorunda main.cpp) set_target_properties (myAppV1 ​​PROPERTIES COMPILE_DEFINITIONS "-DBUILDTYPE = 1") – linello

0

bir başka yolu olabilir: kimse bu nereden

mkdir two directory 
buildflavor1 
buildflavor2 

ilk alt ayında dizin çalıştır:

İkinci vadede
cmake -DFLAVOR=OPTION1 .. 

:

run cmake -DFLAVOR=OPTION2 .. 

Yani farklı derleme bayrağıyla aynı adla yürütülebilir iki böylece kendi özelliği .o ve olduğunu.