相关文章推荐
旅行中的抽屉  ·  Ubuntu18.04系统下Opencv2. ...·  2 月前    · 
温柔的小蝌蚪  ·  CMake笔记-Linux下安装CMake3 ...·  1 月前    · 
光明磊落的烤土司  ·  介绍常见的JSON压缩算法-腾讯云开发者社区 ...·  11 月前    · 
打酱油的香槟  ·  使用ALB配置301或302重定向后返回40 ...·  1 年前    · 
烦恼的跑步鞋  ·  c# - Uploading to ...·  1 年前    · 
卖萌的水桶  ·  RecyclerView更新之-Concat ...·  1 年前    · 
Code  ›  ROS2中CMake编译选项的设置开发者社区
社区功能 编译程序 cmake
https://cloud.tencent.com/developer/article/2039049
踢足球的芒果
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. 腾讯云 版权所有

登录 后参与评论
 
推荐文章
旅行中的抽屉  ·  Ubuntu18.04系统下Opencv2.4.11安装CMAKE错误记录_opencv2.4.11安装报错
2 月前
温柔的小蝌蚪  ·  CMake笔记-Linux下安装CMake3.20版本
1 月前
光明磊落的烤土司  ·  介绍常见的JSON压缩算法-腾讯云开发者社区-腾讯云
11 月前
打酱油的香槟  ·  使用ALB配置301或302重定向后返回405_负载均衡-阿里云帮助中心
1 年前
烦恼的跑步鞋  ·  c# - Uploading to Azure WebApp throws `ConnectionResetException: The client has disconnected` - Stack Overflow
1 年前
卖萌的水桶  ·  RecyclerView更新之-ConcatAdapter(MergeAdapter)_concatadapter更新数据源_黑金白土的博客-CSDN博客
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号