2012-04-03 2 views
8

Я недавно портировал свой проект Qt от qmake до CMake. Моя основная программа содержит значение, которое зависит от директивы #define.Как создать программу с двумя различными значениями переменной в CMake

Я хочу указать, что определять директиву извне через CMake и построить 3 разных именованных варианта одного и того же исполняемого файла.

Как мне это сделать?

Я видел set_target_properties, но это работает только для библиотек, а не для исполняемых файлов.

Например, я хочу, что следующая программа,

int main() 
{ 

    cout << BUILDTYPE << endl; 
} 

он составлен в 3-х различных вкусов (3 исполняемых) на основе BUILDTYPE "define" , например, в моем CMakeLists.txt Я хочу, чтобы указать

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

, но это не правильный синтаксис. Некоторые намеки? и я получаю 3 исполняемых файла, который печатает

ответ

9

Вы уверены, что set_target_properties не работает? Как об этом один:

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

или:

set_target_properties(myAppV1 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=1") 

На моей машине это работает:

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

Спасибо! я должен переместить set_target_properties после add_executable и использовать его во второй версии вы написали add_executable (myAppv1 main.cpp) set_target_properties (myAppV1 ​​СВОЙСТВА COMPILE_DEFINITIONS "BUILDTYPE = 1") но НЕ так add_executable (myAppv1 main.cpp) set_target_properties (myAppV1 ​​PROPERTIES COMPILE_DEFINITIONS "-DBUILDTYPE = 1") – linello

0

Другой способ может быть:

mkdir two directory 
buildflavor1 
buildflavor2 

В первом подразделам запуск каталога:

cmake -DFLAVOR=OPTION1 .. 

во втором периоде:

run cmake -DFLAVOR=OPTION2 .. 

Так два исполняемых с таким же именем с различной компиляцией флагом с собственной функция .o и так далее.

Смежные вопросы