构建系统VS 构建工具
两者的区分点在于针对的对象不同:
- 构建系统之针对一个单独的包进行构建
- 构建工具重点在于按照依赖关系依次调用构建系统完成一系列功能包的构建。
ROS中用到的构建系统:
- CMake
- CMake 是一个跨平台构建系统生成器。项目使用独立于平台的文件指定其生成过程。用户通过使用CMake为其平台上的本机工具生成构建系统来构建项目。
- 通常用法有:cmake、make、make intsall
- ament_cmake
- catkin
- catkin基于CMake,并提供了一组方便的函数,使编写CMake包更容易。它自动生成 CMake 配置文件以及 pkg 配置文件。它还提供了注册不同类型测试的函数。
- Python setuptools
- setuptools是Python包的打包常用工具。Python 包使用文件来描述依赖项,以及如何构建和安装内容。在ROS2中,功能包可以是“普通”Python包,而在ROS1中,任何Python功能都是从CMake文件触发setup.py进行打包。
- 通常的用法有:python setup.py
ROS中用到的构建工具:
- colcon
- colcon是一个命令行工具,用于改进构建,测试和使用多个软件包的工作流程。它自动化了流程,处理了订购并设置了使用软件包的环境。
- catkin_make
- 该工具仅调用 CMake 一次,并使用 CMake 的函数在单个上下文中处理所有包。
- 虽然这是一种有效的方法,因为所有包中的所有目标都可以并行化,但它具有明显的缺点。由于所有函数名称、目标和测试都共享一个命名空间,并且规模更大,这很容易导致冲突。
- catkin_make_isolated
- catkin_tools
- ament_tools
- ament_tools由用于构建 ROS 2 包的独立 Python 3 包提供。它是为引导ROS 2项目而开发的,因此仅针对Python 3,并且可以在Linux,MacOS和Windows上运行。
很明显colcon作为构建工具,通过调用CMake、Python setuptools完成构建。
Colcon是个啥
colcon其实是一个功能包构建工具,这个工具用来做什么的呢?
简单点说就是用来编译代码的,colcon想当于ros1中的catkin工具
ROS2默认是没有安装colcon的,需要自己安装
安装colcon
sudo apt-get install python3-colcon-common-extensions
测试运行
下载例子
- 创建一个工作区文件夹colcon_test_ws
cd d2lros2/chapt2/
mkdir colcon_test_ws && cd colcon_test_ws
- 下载个ROS2示例源码测试一下
git clone https://github.com/ros2/examples src/examples -b humble
- 编译工程
colcon build
- 编完之后的目录结构
- build 目录存储的是中间文件。对于每个包,将创建一个子文件夹,在其中调用例如CMake
- install 目录是每个软件包将安装到的位置。默认情况下,每个包都将安装到单独的子目录中。
- log 目录包含有关每个colcon调用的各种日志信息。
.
├── build
├── install
├── log
└── src
4 directories, 0 files
运行例子
- 打开一个终端使用 cd colcon_test_ws进入我们刚刚创建的工作空间,先source 一下资源
source install/setup.bash
- 运行一个订杂志节点,你将看不到任何打印,因为没有发布者
ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function
- 打开一个新的终端,先source,再运行一个发行杂志节点
source install/setup.bash
ros2 run examples_rclcpp_minimal_publisher publisher_member_function
指令
build参数
构建指令
- –packages-select ,仅生成单个包(或选定的包)
colcon build --packages-select YOUR_PKG_NAME
- –packages-up-to,构建选定的包,包括其依赖项
- –packages-above,整个工作区,然后对其中一个包进行了更改。此指令将重构此包以及(递归地)依赖于此包的所有包。
指定构建后安装的目录
可以通过 --build-base参数和–install-base,指定构建目录和安装目录。
不编译测试单元
colcon build --packages-select YOUR_PKG_NAME --cmake-args -DBUILD_TESTING=0
- –cmake-args,将任意参数传递给CMake。与其他选项匹配的参数必须以空格为前缀。
运行编译的包的测试
colcon test
符号链接安装
colcon build --symlink-install
- 启用–symlink-install后将不会把文拷贝到install目录,而是通过创建符号链接的方式
- 允许通过更改src下的部分文件来改变install,每次调整 python 脚本时都不必重新build了