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 ..