当前位置:网站首页>ROS2中CMake编译选项的设置
ROS2中CMake编译选项的设置
2022-07-04 03:51:00 【首飞爱玩机器人】
编译选项有很多,这里列出一些常用的编译选项设置,并说明作用。
指定使用的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
觉得有用就点赞吧!
我是首飞,一个帮大家填坑的机器人开发攻城狮。
另外在公众号《首飞》内回复“机器人”获取精心推荐的C/C++,Python,Docker,Qt,ROS1/2等机器人行业常用技术资料。
边栏推荐
- Activiti7 task service - process variables (setvariable and setvariablelocal)
- 指针数组和数组指针
- “软硬皆施”,助力建成新型云计算数据中心
- User defined path and file name of Baidu editor in laravel admin
- LevelDB源码解读-SkipList
- Pointer array and array pointer
- PostgreSQL users cannot create table configurations by themselves
- [Yugong series] go teaching course 002 go language environment installation in July 2022
- Objective-C string class, array class
- TCP-三次握手和四次挥手简单理解
猜你喜欢
Idea configuration 360zip open by default -- external tools
PPt 教程,如何在 PowerPoint 中将演示文稿另存为 PDF 文件?
Unity移动端游戏性能优化简谱之 画面表现与GPU压力的权衡
Infiltration practice guest account mimikatz sunflower SQL rights lifting offline decryption
ctf-pikachu-XSS
ctf-pikachu-CSRF
Msgraphmailbag - search only driveitems of file types
Penetration practice - sqlserver empowerment
如何远程办公更有效率 | 社区征文
The maximum expiration time of client secret in azure ad application registration is modified to 2 years
随机推荐
Balance between picture performance of unity mobile game performance optimization spectrum and GPU pressure
Restore the subtlety of window position
Tcpclientdemo for TCP protocol interaction
还原窗口位置的微妙之处
EV6 helps the product matrix, and Kia is making efforts in the high-end market. The global sales target in 2022 is 3.15 million?
Go 语言入门很简单:Go 实现凯撒密码
[paddleseg source code reading] paddleseg calculation dice
Evolution of MySQL database architecture
01 QEMU starts the compiled image vfs: unable to mount root FS on unknown block (0,0)
Global exposure and roller shutter exposure of industrial cameras
【微服务|openfeign】feign的两种降级方式|Fallback|FallbackFactory
Interpretation of leveldb source code skiplist
线程常用的方法
Two sides of the evening: tell me about the bloom filter and cuckoo filter? Application scenario? I'm confused..
Pytest multi process / multi thread execution test case
C语言双向链表初版
程序员远程办公喜忧参半| 社区征文
Objective-C description method and type method
ctf-pikachu-XSS
Mitsubishi M70 macro variable reading Mitsubishi M80 public variable acquisition Mitsubishi CNC variable reading acquisition Mitsubishi CNC remote tool compensation Mitsubishi machine tool online tool