CMake系列:正确使用多配置编译系统

Posted 岬淢箫声

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMake系列:正确使用多配置编译系统相关的知识,希望对你有一定的参考价值。

目录

常见错误

问题现象

正确做法

if指令应该什么时候使用

活学活用


把IF指令用于多配置编译系统是很多初学者容易犯下的错误。这篇文章启示性的教你如何正确理解、使用CMake的多配置编译系统。

常见错误

以Debug和Release配置有不同的宏定义为例,如下所示:

   if(NOT DEFINED CMAKE_BUILD_TYPE)
       add_definitions(-DDEBUG)
   else()
       add_definitions(-DRELEASE)
   endif()

问题现象

  1. 按Debug运行Configure后Release配置没有 `RELEASE`宏定义,按Release运行Configure后Debug配置没有 `DEBUG`宏定义。
  2. 每次运行 `cmake -B`命令只能看到一个宏定义

正确做法

方法一

   add_definitions(
        $<$<CONFIG:DEBUG>:-DDEBUG> 
        $<$<CONFIG:RELEASE>:-DRELEASE>
    )

方法二

add_definitions($<IF:$<CONFIG:DEBUG>,-DDEBUG,-DRELEASE>)

if指令应该什么时候使用

  1. 不同的编译器有不同的编译选项,比如MSVC和GCC
  2. 不同的目标平台有不同的编译选项,比如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

转载请注明来源

以上是关于CMake系列:正确使用多配置编译系统的主要内容,如果未能解决你的问题,请参考以下文章

CMake系列:问题解决点滴记录

CMake系列:问题解决点滴记录

ubuntu(Linux)安装Vs code并配置c++编译及cmake多文件编译

VSCode开发C++时让intelliSense正确识别include关系

VSCode开发C++时让intelliSense正确识别include关系

cmake编译单/多文件