我最近将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个打印的可执行文件
答案 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
,依此类推。