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

时间:2012-04-03 08:20:59

标签: c++ build cmake compiler-flags

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

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

我该怎么办?

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

例如,我想要以下程序,

 int main()
 {

    cout << BUILDTYPE << endl;
 }

它基于BUILDTYPE "define"以3种不同的风格(3个可执行文件)编译 例如,在我的CMakeLists.txt我要指定

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

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

2 个答案:

答案 0 :(得分: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")

答案 1 :(得分:0)

另一种方式可能是:

mkdir two directory
buildflavor1
buildflavor2

在第一个子目录中运行:

cmake -DFLAVOR=OPTION1 ..

在第二轮中:

run cmake -DFLAVOR=OPTION2 ..

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