目录
常见错误
问题现象
正确做法
if指令应该什么时候使用
活学活用
把IF指令用于多配置编译系统是很多初学者容易犯下的错误。这篇文章启示性的教你如何正确理解、使用CMake的多配置编译系统。
常见错误
以Debug和Release配置有不同的宏定义为例,如下所示:
if(NOT DEFINED CMAKE_BUILD_TYPE)
add_definitions(-DDEBUG)
else()
add_definitions(-DRELEASE)
endif()
问题现象
- 按Debug运行Configure后Release配置没有 `RELEASE`宏定义,按Release运行Configure后Debug配置没有 `DEBUG`宏定义。
- 每次运行 `cmake -B`命令只能看到一个宏定义
正确做法
方法一
add_definitions(
$<$<CONFIG:DEBUG>:-DDEBUG>
$<$<CONFIG:RELEASE>:-DRELEASE>
)
方法二
add_definitions($<IF:$<CONFIG:DEBUG>,-DDEBUG,-DRELEASE>)
if指令应该什么时候使用
- 不同的编译器有不同的编译选项,比如MSVC和GCC
- 不同的目标平台有不同的编译选项,比如Windows和Linux
活学活用
CI只需要验证Debug配置环境可运行:cmake -B build -DCMAKE_BUILD_TYPE=Debug
,Release同理。
CI只需要验证Debug编译结果可运行:cmake --build build --config Debug -j 16
,Release同理。
作者:岬淢箫声
CMake系列:正确使用多配置编译系统_岬淢箫声的博客-CSDN博客https://blog.csdn.net/caoshiying/article/details/129065479
转载请注明来源