【ROS2概念】系列(九)——colcon构建工具

目录

〇、常用命令速查

创建符号连接,每次调整 launch文件时都不必重新build,如果install的文件需要拷贝到另外的机器使用,不要使用这个参数,否则会找不到源文件。
colcon build --symlink-install

编译一个单独的包,但这个指令并不会编译该包的依赖,往往会报错。
colcon build --packages-select <name-of-pkg>

编译一个单独的包和其依赖编译
colcon build --packages-up-to <name-of-pkg>

编译时忽略指定包
colcon build --packages-ignore <name-of-pkg>

编译开启Debug模式
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Debug

编译开启Release模式
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release

编译一个package 并且把log 显示在屏幕上
colcon build --packages-select rmw_coredds_shared_cpp --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Debug --event-handlers=console_direct+

设置编译优化等级
colcon build --packages-select examples_rclcpp_minimal_action_client --symlink-install --cmake-args -DCMAKE_CXX_FLAGS='-o0 -ggdb' -DCMAKE_C_FLAGS='-o0 -ggdb'

colcon build --cmake-args -DCMAKE_CXX_FLAGS="-O2 -g -Wall "
“-D” --宏定义,每定义一个就在前边加上"-D",给gcc传递参数,-g debug选项, gdb模式,符号表会保存,-s link选项,删除符号表,这一步会极大减少文件体积。

一、colcon构建工具介绍

1.1 构建系统与构建工具

构建系统与构建工具区分点在于针对的对象不同,构建系统只针对一个单独的包进行构建,而构建工具重点在于按照依赖关系依次调用构建系统完成一系列功能包的构建。

1.2 构建系统

构建系统包括CMake、Python setuptools、catkin。

catkin基于CMake,并提供了一组方便的函数,使编写CMake包更容易。它自动生成 CMake 配置文件以及 pkg 配置文件。它还提供了注册不同类型测试的函数。python setuptools是用来创建和分发ROS的Python包。

1.3 构建工具

构建工具包括catkin_make、catkin_make_isolated、python-catkin-tools、ament_tools、colcon。

catkin_make由包含ROS 1构建系统的ROS软件包catkin提供。该构建工具仅调用CMake一次,并使用CMake的函数 add_subdirectory()在单一环境中处理所有软件包。

catkin_make_isolated也是由包含ROS 1构建系统的ROS软件包catkin提供的。该构建工具是在catkin_make之后开发的,用于解决在单一CMake环境中构建多个软件包所涉及的问题。

catkin_tools是由用于构建ROS 1软件包的独立Python软件包提供的。该构建工具是在catkin_make / catkin_make_isolated之后开发的,用于并行构建多个软件包并提供显著的可用性改进。该构建工具支持构建CMake软件包并且单独构建这些软件包,以及支持跨软件包并行处理过程。

ament_tools是ament为早期ROS2提供的一种工具,可以让用户完成功能包的编译、测试、安装、卸载,而且它本身也是一个Python的功能包。

1.4 colcon构建工具

colcon是一个构建软件包集合的命令行工具,是ros构建工具catkin_make、catkin_make_isolated、catkin_tools 和ament_tools的迭代版本,其设计目的是为了开发一款通用的软件包构建工具,可以依赖不同的构建工具(如catkin_cmake, ament_tool等),支持不同的构建系统(如catkin, ament等)。

ROS2Bouncy 版本之前的构建工具使用的是ament_tool,之后(foxy、Humble版本)的构建工具统一使用colcon。但ROS2默认是没有安装colcon的,需要单独安装。

二、colcon参数

colcon的命令行参数包括七大类,分别是Global 参数、Executor参数、Event handler参数、Discovery 参数、Package selection参数、Mixin参数、环境变量。

2.1 Global 参数

2.2 Executor参数

2.3 Event handler参数

2.4 Discovery 参数

2.5 Package selection参数

2.6 Mixin参数

2.7 环境变量

三、colcon build命令

colcon build指令用来构建一组包。

上图显示了colcon build的所有参数

3.1 --packages-select参数

仅构建单个包(或选定的包)。

3.2 --symlink-install参数

不会把文拷贝到install目录,而是通过创建符号链接的方式

3.3 --parallel-workers NUMBER参数

并行处理的最大作业数。默认值为 os.cpu_count() 给出的逻辑 CPU 内核数

四、colcon edit命令

colcon edit命令可以搜索和编辑包内的文件。

colcon edit <package_name> <file_name>

当提供了正确的包名和文件名时,它将使用默认编辑器vim打开该文件,可以通过将$EDITOR环境变量指定为首选编辑器来使用其他编辑器。

如要使用VS Code,终端输入:

export EDITOR=code

colcon edit搜索过程中,会忽略目录中的隐藏文件和.pyc文件。如果存在多个同名文件,它们将全部列出,可以输入索引号以选择要编辑的文件。

五、colcon graph命令

colcon graph命令生成包的可视化依赖关系图,对于每个包,都会显示路径、名称和类型。

colcon graph支持的命令参数如下图:

常用是--legend--dot这两个参数。

5.1 --legend参数

colcon graph --legend

默认情况下,它使用 ASCII 文字输出一个按拓扑排序的包列表,以指示直接和传递依赖关系。

输出:

+ marks when the package in this row can be processed
* marks a direct dependency from the package indicated
  by the + in the same column to the package in this row
. marks a transitive dependency

pkg1  + **.
pkg2   + *
pkg3    + *
pkg4     +
pkg5      +

5.2 --dot参数

colcon graph --dot

以 DOT 形式输出拓扑图。不同颜色的边代表依赖类型:蓝色=构建,红色=运行,棕褐色=测试。虚线边缘是间接依赖关系,只有在跳过某些包时才会出现。

输出:

通常,输出应通过管道传输到dot,例如 。colcon graph --dot | dot -Tpng -o graph.png

六、colcon info

colcon info命令显示有关包的详细信息。

对于每个包,都会显示一组以包路径开头的行。此外,还列举了包类型、名称、构建/运行/测试依赖项和包版本等元数据。

默认情况下显示所有包的信息。可选地,可以传递单个或多个包名称以仅显示它们的信息。

七、colcon list

对于每个包,都会显示一行,其中包含由制表符分隔的路径、名称和类型。默认情况下,该列表按包名称的字母顺序排序。可选地,它可以根据包的依赖关系按拓扑对包进行排序。

八、colcon metadata

colcon metadata提供多个子命令来管理元数据存储库的注册、内省和更新。

参考:

colcon docs:https://colcon.readthedocs.io/en/released/reference/verb/build.html
colcon PDF:https://buildmedia.readthedocs.org/media/pdf/colcon/released/colcon.pdf

猜你喜欢

转载自blog.csdn.net/baidu_41617231/article/details/135409253