8

我最近将我的Qt项目qmakeCMake. 我的主程序包含一个取决于#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 个打印的可执行文件

4

2 回答 2

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")
于 2012-04-03T08:48:16.933 回答
0

另一种方法可能是:

mkdir two directory
buildflavor1
buildflavor2

在第一个子目录中运行:

cmake -DFLAVOR=OPTION1 ..

在第二次运行中:

run cmake -DFLAVOR=OPTION2 ..

因此,两个具有相同名称的可执行文件具有不同的编译标志,具有自己的功能.o,依此类推。

于 2016-12-18T15:19:32.740 回答