如何在CMake中使用2个不同的变量值构建程序

lin*_*llo 8 c++ build cmake compiler-flags

我最近将我的Qt项目移植qmake到了CMake.我的主程序包含一个取决于#define指令的值.

我想在外部通过指定define指令CMake并构建同一可执行文件的3个不同命名版本.

我该怎么办?

我见过set_target_properties但这只适用于库而不适用于可执行文件.

例如,我想要以下程序,

 int main()
 {

    cout << BUILDTYPE << endl;
 }
Run Code Online (Sandbox Code Playgroud)

根据我想要指定的BUILDTYPE "define" 例子,它以3种不同的风格(3个可执行文件)编译CMakeLists.txt

add_executable(myAppV1 -DBUILDTYPE=1)
add_executable(myAppV2 -DBUILDTYPE=2)
add_executable(myAppV3 -DBUILDTYPE=3)
Run Code Online (Sandbox Code Playgroud)

但这不是正确的语法.一些暗示?我得到3个可执行文件打印

Ano*_*ous 9

你确定set_target_properties不行吗?这个怎么样:

set_target_properties(myAppV1 PROPERTIES COMPILE_FLAGS "-DBUILDTYPE=1")
Run Code Online (Sandbox Code Playgroud)

要么:

set_target_properties(myAppV1 PROPERTIES COMPILE_DEFINITIONS "BUILDTYPE=1")
Run Code Online (Sandbox Code Playgroud)

在我的机器上它工作:

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")
Run Code Online (Sandbox Code Playgroud)