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

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值