cmake

在CMakeLists.txt中可以通过修改CMake内置的环境变量来改变C或C++的编译选项.

编译选项相关的CMake 变量如下:

CMAKE_C_FLAGS = 
CMAKE_C_FLAGS_DEBUG = -g
CMAKE_C_FLAGS_MINSIZEREL = -Os -DNDEBUG
CMAKE_C_FLAGS_RELEASE = -O3 -DNDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO = -O2 -g -DNDEBUG

CMAKE_CXX_FLAGS = 
CMAKE_CXX_FLAGS_DEBUG = -g
CMAKE_CXX_FLAGS_MINSIZEREL = -Os -DNDEBUG
CMAKE_CXX_FLAGS_RELEASE = -O3 -DNDEBUG
CMAKE_CXX_FLAGS_RELWITHDEBINFO = -O2 -g -DNDEBUG
1234567891011

等号右边是通过在CMakeLists.txt中打印对应变量得到的默认值。

对于C语言设置CMAKE_C_FLAGS相关参数,C++语言设置CMAKE_CXX_FLAGS相关参数。并且分为DEBUG,RELEASE,MINSIZEREL和RELWITHDEBINFO四种类型。

以C语言编译选项为例:

CMAKE_C_FLAGS_DEBUG:编译Debug版本的时候会采用的编译选项,默认只有一个-g选项,包含调试信息;

CMAKE_C_FLAGS_RELEASE:编译Release版本的时候采用的编译选项,默认包-O3选项,该选项表示优化等级;

CMAKE_C_FLAGS_MINSIZEREL:主要减小目标文件大小,选项-Os就是这个作用;

CMAKE_C_FLAGS_RELWITHDEBINFO:包含调试信息的Release版本,-O2和-g,优化的同时也包含了调试信息;

CMAKE_C_FLAGS:这个选项没有默认值;

顾名思义,当CMake在编译项目的时候,选项为Debug则会采用CMAKE_C_FLAGS_DEBUG选项,编译Release则会采用CMAKE_C_FLAGS_RELEASE选项,因此,需要设置编译选项的时候,在CMakeLists.txt中设置这些变量就可以了。

实际上可以分别设置CMAKE_C_FLAGS_DEBUG和CMAKE_C_FLAGS_RELEASE,如下:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++11 -Wl,-rpath=../lib")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11 -g")
12

上面的设置两个都有-std=c++11,这个选项是一个公共的选项,不管是Release还是Debug都需要设置。这种情况还可以把公共的设置放在CMAKE_C_FLAGS变量里面,如下:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}  -Wl,-rpath=../lib")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g")
123

因为在最终编译的时候的编译选项不管是Release还是Debug都包含了CMAKE_CXX_FLAGS这个变量。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • CMake 简介 CMake 是一个跨平台的自动化建构系统,它使用一个名为 CMakeLists.txt 的文件来...
    火山_eb5e阅读 578评论 0 0
  • CMake官方教程 CMake教程提供了逐步指南,涵盖了CMake可以解决的常见构建系统问题。了解示例项目中各个主...
    YottaYuan阅读 684评论 0 1
  • 友情提示,下面一大段都是废话,可以直接跳到后面的部分... 工作以来,一直从事的是基于Windows的C/C++开...
    LiarMaiq阅读 1,029评论 0 0
  • 1.安装 $sudo apt-get install cmake 2.示例:简单的文件目录 sample |—...
    荷包蛋酱阅读 29,776评论 0 15
  • 目录 参考资料 1. 官方文档[https://cmake.org/cmake/help/v3.21/]2. CM...
    小小小_大大大阅读 1,547评论 0 0