C++ 如何在CMake中使用一个变量的两个不同值构建程序

C++ 如何在CMake中使用一个变量的两个不同值构建程序,c++,build,cmake,compiler-flags,C++,Build,Cmake,Compiler Flags,我最近将我的Qt项目从qmake移植到CMake。 我的主程序包含一个值,该值取决于#define指令 我想通过CMake从外部指定define指令,并构建同一可执行文件的3个不同命名版本 我该怎么做 我见过set\u target\u properties,但这只适用于库,不适用于可执行文件 例如,我想要下面的程序 int main() { cout << BUILDTYPE << endl; } 但这不是正确的语法。 有什么提示吗? 我得到了3个打印

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

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

我该怎么做

我见过
set\u target\u properties
,但这只适用于库,不适用于可执行文件

例如,我想要下面的程序

 int main()
 {

    cout << BUILDTYPE << endl;
 }
但这不是正确的语法。 有什么提示吗?
我得到了3个打印的可执行文件

你确定
set\u target\u properties
不起作用吗?这个怎么样:

set_target_properties(myAppV1 PROPERTIES COMPILE_FLAGS "-DBUILDTYPE=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")
另一种方法可以是:

mkdir two directory
buildflavor1
buildflavor2
在第一个子目录中运行:

cmake -DFLAVOR=OPTION1 ..
在第二轮中:

run cmake -DFLAVOR=OPTION2 ..

因此,两个具有相同名称和不同编译标志的可执行文件具有自己的特性
.o
等等。

谢谢!我必须在add_可执行文件之后移动set_target_属性,并在您编写的add_可执行文件(myAppv1 main.cpp)set_target_属性(myAppv1 properties COMPILE_DEFINITIONS“BUILDTYPE=1”)的第二个版本中使用它,但不能以这种方式添加可执行文件(myAppv1 main.cpp)set_target_属性(myAppv1 properties COMPILE_DEFINITIONS“-DBUILDTYPE=1”)
cmake -DFLAVOR=OPTION1 ..
run cmake -DFLAVOR=OPTION2 ..