相关文章推荐
憨厚的大脸猫  ·  Great Ci'en ...·  1 周前    · 
讲道义的紫菜汤  ·  CMOS图像传感器_百度百科·  9 月前    · 
深沉的便当  ·  身高焦虑|9岁女孩为打“性抑制针”,大半年花 ...·  9 月前    · 
坐怀不乱的板栗  ·  學雜費資訊- 國立臺灣科技大學·  1 年前    · 
腼腆的柠檬  ·  宝莲灯:孙悟空是斗战胜佛,为什么会被二郎神折 ...·  1 年前    · 
小百科  ›  ROS2中CMake编译选项的设置开发者社区
社区功能 编译程序 cmake
踢足球的芒果
1 年前
作者头像
首飞
0 篇文章

ROS2中CMake编译选项的设置

原创
前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > ROS2 > ROS2中CMake编译选项的设置

ROS2中CMake编译选项的设置

原创
作者头像
首飞
发布 于 2022-07-03 20:59:42
638 0
发布 于 2022-07-03 20:59:42
举报

编译选项有很多,这里列出一些常用的编译选项设置,并说明作用。

指定使用的 C++ 版本

set(CMAKE_CXX_STANDARD 17)

可以根据需求设置11, 14, 17, 20等等 C++ 版本。

设置编译选项

add_compile_options(-Wall -Wextra -Wpedantic -Wno-unused-parameter -g)

告警选项:

告警选项

作用描述

-Wall

允许发出gcc提供的所有有用的报警信息

-Wextra

对所有合法但值得怀疑的表达式发出警告

-Werror

把告警信息当做错误信息对待

-pedantic

允许发出ANSI C标准所列的全部警告信息

-w

关闭所有警告(不推荐使用)

-Wfatal-errors

遇到第一个错误就停止,减少查找错误时间

我们加上了告警都转成错误后常常会看到下面的错误信息。

error: unused parameter ‘test’ [-Werror=unused-parameter]
error: variable 'begin' set but not used [-Werror=unused-but-set-variable]

有地方设置了变量但没有使用,可以加上下面的代码消除这个类型的错误。

#define UNUSED(x) (void)(x)

代码生成选项:

代码生成选项

选项作用描述

-fPIC

编译动态库时,要求产生与位置无关代码(Position-Independent Code)。也就是代码中不使用绝对地址,而使用相对地址,因此加载器可以将它加载到内存任意位置并执行。如果不使用-fPIC,产生的代码中包含绝对地址。加载器加载它时,要先重定位,重定位会修改代码段的内容,因此每个进程都生成这个代码段的一份拷贝。

-fvisibility=default or hidden

默认情况下,设置ELF镜像中符号的可见性为public或hidden。缺省值是default。hidden可以显著地提高链接和加载共享库的性能,生成更加优化的代码,提供近乎完美的API输出和防止符号碰撞。强烈建议在编译共享库的时候使用它。

代码优化选项:

优化选项

选项作用描述

-O0

不优化。这是缺省值

-O1

尝试优化编译时间和可执行文件大小。

-O2

尝试几乎全部的优化功能,但不会进行“空间换时间”的优化方法。

-O3

再打开一些优化选项:-finline-functions, -funswitch-loops 和 -fgcse-after-reload 。

-O

等同与-O1

-Os

对生成文件大小进行优化。打开 -O2 开的全部选项,除了会那些增加文件大小的。

-fomit-frame-pointer

去掉所有函数SFP(Stack Frame Pointer),即在函数调用时不保存栈帧指针SFP。可以提高程序运行速度, 代价是不能通过backtrace进行调试。

-fno-omit-frame-pointer

与-fno-omit-frame-pointer相反

注意: -O1打开-fomit-frame-pointer选项

注意: 无特别需求,优化选项也可不单独设置,直接设置后面提到的 编译类型 即可

Debug 选项:

Debug 选项

选项作用描述

-g

产生带有调试信息的目标代码

-ggdb

生成gdb专 用的调试信息,会有一些gdb专用的扩展

-gdwarf-2

产生DWARF version2 的格式的调试信息

注意: 无特别需求, Debug 选项也可不单独设置,直接设置后面提到的 编译类型 即可

设置编译类型

在编译命令中指定,如下所示:

colcon build --cmake-args '-DCMAKE_BUILD_TYPE=RelWithDebInfo'

编译类型有如下四种:

编译类型

类型描述

类似选项集

Debug

关闭了代码优化,增加了代码调试信息,提升了警告等级

-O0 -g -Wall -D_DEBUG

Release

程序达到最佳性能,运行速度最快,但丢失大量调试信息

-O2 -DNDEBUG

RelWithDebInfo

该模式会尽量按照 Release 的模式编译,但仍带有调试信息,是一个在速度和调试信息间的折中选择。

-O0 -ggdb -DNDEBUG

MinSizeRel

尽量减少执行文件的体积,一般用于嵌入式场景

-O1 -DNDEBUG -DMIN_SIZE_REL

补充说明:

DCMAKE_BUILD_TYPE 中的配置与 g++ 编译选项之间的关系:

DCMAKE_BUILD_TYPE 是 Cmake 配置层面上的东西。最终编译类型的相关配置会转化到 g++ 编译选项上。

参考:

https://blog.51cto.com/u_15169172/2710502

点击展开阅读全文

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

打包
c++

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

打包
c++
#ROS2
#CMake
评论
登录 后参与评论
0 条评论
热度
最新
登录 后参与评论
关于作者
首飞
0
文章
0
累计阅读量
0
获赞
前往专栏
目录
  • 指定使用的C++版本
  • 设置编译选项
切换旧版
领券
  • 社区

    • 专栏文章
    • 阅读清单
    • 互动问答
    • 技术沙龙
    • 技术视频
    • 团队主页
    • 腾讯云TI平台
  • 活动

    • 自媒体分享计划
    • 邀请作者入驻
    • 自荐上首页
    • 技术竞赛
  • 资源

    • 技术周刊
    • 社区标签
    • 开发者手册
    • 开发者实验室
  • 关于

    • 社区规范
    • 免责声明
    • 联系我们
    • 友情链接

腾讯云开发者

扫码关注腾讯云开发者

扫码关注腾讯云开发者

领取腾讯云代金券

热门产品

  • 域名注册
  • 云服务器
  • 区块链服务
  • 消息队列
  • 网络加速
  • 云数据库
  • 域名解析
  • 云存储
  • 视频直播

热门推荐

  • 人脸识别
  • 腾讯会议
  • 企业云
  • CDN加速
  • 视频通话
  • 图像分析
  • MySQL 数据库
  • SSL 证书
  • 语音识别

更多推荐

  • 数据安全
  • 负载均衡
  • 短信
  • 文字识别
  • 云点播
  • 商标注册
  • 小程序开发
  • 网站监控
  • 数据迁移

Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有

深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569

腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287

问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

Copyright © 2013 - 2023 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

登录 后参与评论
 
推荐文章
憨厚的大脸猫  ·  Great Ci'en Monastery Great Wild Goose Pagoda 大慈恩寺大雁塔
1 周前
讲道义的紫菜汤  ·  CMOS图像传感器_百度百科
9 月前
深沉的便当  ·  身高焦虑|9岁女孩为打“性抑制针”,大半年花了近十万专家:患矮小 ...
9 月前
坐怀不乱的板栗  ·  學雜費資訊- 國立臺灣科技大學
1 年前
腼腆的柠檬  ·  宝莲灯:孙悟空是斗战胜佛,为什么会被二郎神折磨到经脉尽断呢?_ ...
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号