Как собрать программу с 2 разными значениями переменной в CMake - PullRequest
8 голосов
/ 03 апреля 2012

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

Я хочу указать эту внешнюю директиву через 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 исполняемых файла, которые печатают

Ответы [ 2 ]

9 голосов
/ 03 апреля 2012

Вы уверены, что 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 голосов
/ 18 декабря 2016

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

mkdir two directory
buildflavor1
buildflavor2

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

cmake -DFLAVOR=OPTION1 ..

во втором прогоне:

run cmake -DFLAVOR=OPTION2 ..

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

...