CMake编译选项CMAKE_CXX_FLAGS详解

概要

本文涉及cmakedebug/release模式下的编译选项控制,其具体的实践是基于submodule的代码组织形式。

基础知识

先看一下和CMAKE_CXX_FLAGS相关的参数默认值

参数

默认值

CMAKE_CXX_FLAGS

CMAKE_C_FLAGS_DEBUG

-g

CMAKE_CXX_FLAGS_RELEASE

-O3 -DNDEBUG

如果对应参数未设置,则使用默认值。

我们在使用cmake命令时会指定使用哪种编译模式,它是通过CMAKE_BUILD_TYPE来定义的,如我们可以这么干:

Debug编译:

cmake -DCMAKE_BUILD_TYPE=Debug ..

Release编译:

cmake -DCMAKE_BUILD_TYPE=Release ..

对于debug模式,实际使用的编译选项是

CMAKE_CXX_FLAGS + CMAKE_C_FLAGS_DEBUG

对于release模式,实际使用的编译选项是

CMAKE_CXX_FLAGS + CMAKE_CXX_FLAGS_RELEASE

代码

假设我们有个工程,代码组织如下

├── CMakeLists.txt

├── sub_map

│   ├── CMakeLists.txt

│   ├── interface.h

│   ├── map.cpp

│   └── map.h

├── sub_reloc

│   ├── CMakeLists.txt

│   ├── interface.h

│   ├── reloc.cpp

│   └── reloc.h

└── wrapper.cpp

除了主工程,它还包含两个子模块(submodule),每个子模块有自己的cmakelist。假设我们使用debug模式进行编译,cmake文件中的CMAKE_CXX_FLAGS参数与实际使用的编译选项如下表所示(sub_reloc模块继承了主模块的参数):

模块

CMAKE_CXX_FLAGS设置

实际使用的编译选项

wrapper

-std=c++11 -DANDROID

-std=c++11 -DANDROID  -g

sub_map

-std=c++17

-std=c++17 -g

sub_reloc

-std=c++14 ${CMAKE_CXX_FLAGS}

-std=c++14 -std=c++11 -DANDROID  -g

编译选项打印

默认的编译打印不会有实际使用的编译选项,如需要确认,需要这么做。

在cmakelist文件中添加(子模块也需要)

set(CMAKE_VERBOSE_MAKEFILE ON)

在make命令时需要添加

make VERBOSE=1

相关推荐

  1. CMake编译选项CMAKE_CXX_FLAGS详解

    2024-01-11 20:44:01       31 阅读
  2. 2024.1.16 GCC 编译选项 屏蔽某些警告 CMAKE_CXX_FLAGS

    2024-01-11 20:44:01       31 阅读
  3. cmake编译数据库

    2024-01-11 20:44:01       40 阅读
  4. centos 编译安装 cmake

    2024-01-11 20:44:01       47 阅读
  5. 20231212 cmake 编译中间库

    2024-01-11 20:44:01       43 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-11 20:44:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-11 20:44:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-11 20:44:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-11 20:44:01       20 阅读

热门阅读

  1. Ubuntu查看内存使用情况

    2024-01-11 20:44:01       30 阅读
  2. 【PHP】价格区间字段验证,如4万-5万

    2024-01-11 20:44:01       28 阅读
  3. Linux 基础知识点详细总结

    2024-01-11 20:44:01       30 阅读
  4. C#-sort()利用委托自定义排序

    2024-01-11 20:44:01       33 阅读
  5. R语言【base】——unlink():删除文件和目录

    2024-01-11 20:44:01       35 阅读
  6. 记录学习--校验文件的SHA、MD5

    2024-01-11 20:44:01       37 阅读
  7. Leetcode16-有多少小于当前数字的数字(1365)

    2024-01-11 20:44:01       38 阅读
  8. 【OpenCV学习笔记】- 学习笔记目录

    2024-01-11 20:44:01       42 阅读
  9. 文件分割与合并

    2024-01-11 20:44:01       38 阅读
  10. 力扣_数组25—柱状图中最大的矩形

    2024-01-11 20:44:01       26 阅读