2012-04-03 29 views
8

Gần đây tôi đã chuyển dự án Qt của mình từ qmake đến CMake. Chương trình chính của tôi chứa một giá trị phụ thuộc vào chỉ thị #define.Cách tạo chương trình có 2 giá trị khác nhau của biến trong CMake

Tôi muốn chỉ định xác định chỉ thị bên ngoài thông qua CMake và tạo 3 phiên bản có tên khác nhau của cùng một tệp thực thi.

Tôi nên làm như thế nào?

Tôi đã xem set_target_properties nhưng điều này chỉ hoạt động đối với thư viện chứ không phải cho tệp thi hành.

Ví dụ tôi muốn rằng các chương trình sau đây,

int main() 
{ 

    cout << BUILDTYPE << endl; 
} 

nó được biên dịch trong 3 hương vị khác nhau (3 thực thi) dựa trên BUILDTYPE "define" Ví dụ trong CMakeLists.txt của tôi, tôi muốn chỉ định

add_executable(myAppV1 -DBUILDTYPE=1) 
add_executable(myAppV2 -DBUILDTYPE=2) 
add_executable(myAppV3 -DBUILDTYPE=3) 

nhưng đây không phải là cú pháp đúng. Một số gợi ý? và tôi nhận được 3 tệp thi hành được in

Trả lời

9

Bạn có chắc chắn rằng set_target_properties không hoạt động không? Làm thế nào về vấn đề này một:

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

hay:

set_target_properties(myAppV1 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=1") 

Trên máy tính của tôi nó hoạt động:

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

Cảm ơn bạn! tôi phải di chuyển set_target_properties sau add_executable và sử dụng nó trong phiên bản thứ hai bạn đã viết add_executable (myAppv1 main.cpp) set_target_properties (myAppV1 ​​TÍNH COMPILE_DEFINITIONS "BUILDTYPE = 1") nhưng KHÔNG này cách add_executable (myAppv1 main.cpp) set_target_properties (các thuộc tính myAppV1 ​​COMPILE_DEFINITIONS "-DBUILDTYPE = 1") – linello

0

Một cách khác có thể là:

mkdir two directory 
buildflavor1 
buildflavor2 

Trong tiểu đầu tiên thư mục chạy:

cmake -DFLAVOR=OPTION1 .. 

trong thời gian thứ hai:

run cmake -DFLAVOR=OPTION2 .. 

Vì vậy, hai thực thi cùng tên với cờ biên dịch khác nhau với những chức năng khác của .o và vân vân.

Các vấn đề liên quan