概述

Catkin 是 ROS1 的构建系统框架,提供包管理、依赖解析和构建工具集成,catkin_make 和 catkin_make_isolated 是其具体实现工具,均通过封装 CMake 实现功能,Catkin 作为底层框架,为两者提供统一的构建逻辑和依赖解析能力作为底层框架,为两者提供统一的构建逻辑和依赖解析能力。Ament对标Catkin,是ROS2的系统框架,通过colcon进行构建,colcon对标catkin_make。

catkin_make 是 ROS 1 的推荐工具,而 catkin_make_isolated 更适用于 CI/CD 流程,colcon 是ROS 2 中推荐使用,支持更灵活的构建策略。

  • 构建效率
    catkin_make 支持并行编译,适合快速迭代开发;而 catkin_make_isolated 逐个构建包速度较慢,但能避免依赖冲突。colcon 结合了并行构建和模块化设计,效率更高 。
  • 依赖管理
    catkin_make 和 catkin_make_isolated 依赖 Catkin 框架的 package.xml,但 colcon 支持更灵活的依赖解析,并兼容 ROS 2 的 ament 构建系统 。
  • 跨平台与扩展性
    colcon 是唯一支持跨平台(Windows/macOS)的工具,且通过插件机制可扩展功能(如测试覆盖率分析、交叉编译)
  • 选择建议 :ROS 1 项目优先使用 catkin_make,复杂依赖时用 catkin_make_isolated,ROS 2 项目必须使用 colcon 。

特性

catkin_make

catkin_make_isolated

colcon

适用场景

ROS 1 中小型项目

ROS 1 复杂项目或混合工作空间

ROS 2 推荐工具

构建方式

并行编译(默认共享环境)

串行编译(独立构建每个包)

并行编译(模块化设计)

依赖管理

隐式依赖,共享全局环境

显式依赖,强制隔离

基于 package.xml 的精细依赖解析

跨平台支持

有限

有限

支持 Linux、Windows、macOS

插件扩展性



支持丰富插件机制

对非 Catkin 包支持

不支持

支持

支持

错误隔离性




1. catkin_make

封装了 CMake 和 Make 的复杂性,适合快速构建中小型项目。
支持并行编译,但默认将所有包视为同质化(共享构建环境),可能导致依赖冲突 。

  • 特点
    封装简化 :将 CMake 和 Make 的流程封装为单一命令,自动处理构建细节(如生成 ament.ini 文件、清理构建目录、自动设置 ament.space 等)。
    快速构建 :支持并行编译,适合中小型项目,构建速度较快。
    依赖管理 :默认将所有包视为同质化,即所有包共享同一个构建环境,可能导致依赖冲突。
  • 用途
    适用于简单的 Catkin 工作空间(仅包含 Catkin 包)。
    快速迭代开发时使用,无需严格隔离依赖。
  • 局限性
    无法处理混合工作空间(如同时包含 Catkin 包和非 Catkin 包)。
    编译错误可能因共享环境而相互影响(缺乏隔离性)
-C DIRECTORY:指定工作目录(例如 catkin_make -C build),用于切换到特定构建目录 。
--install :生成安装目录(如 install 文件夹),将编译产物安装到指定路径 。
--use-ninja:使用 Ninja 构建工具替代 Make,提升构建速度 。
--pkg 或 --packages-select :仅编译指定包(例如 catkin_make --pkg my_package)

2. catkin_make_isolated

为解决依赖隔离问题而设计的工具,参数更注重独立性和严格依赖管理,面向复杂依赖管理和调试需求,支持混合工作空间。

  • 特点
    错误隔离 :每个包独立构建,避免编译错误跨包传播,适合调试依赖问题。
    严格依赖管理 :按顺序逐个构建包,强制显式声明依赖关系,确保依赖链完整。
    混合工作空间支持 :允许同时包含 Catkin 包和非 Catkin 包(如纯 CMake 或 ROS 1 的 rosbuild 包)。
  • 用途
    需要严格依赖隔离的场景(如大型项目或调试依赖冲突)。
    构建包含非 Catkin 包的工作空间。
  • 局限性
    编译速度慢 :不支持并行编译,逐个构建包导致效率较低。
    复杂性更高 :需手动管理更多配置,适合高级用户。
-C WORKSPACE:指定工作空间路径(例如 -C build 表示切换到 build 目录执行构建)。
--source SOURCE:指定源码目录路径(默认为 src),用于非标准目录结构的工作空间 。
--build BUILD:指定构建目录路径(默认为 build_isolated),存储中间编译文件 。
--devel DEVEL:指定开发空间路径(默认为 devel_isolated),包含编译后的库和可执行文件。
--merge:合并开发空间路径(默认每个包独立隔离),避免路径冲突。
--install:生成安装目录(如 install_isolated),用于部署最终产物 。
--use-ninja / --use-nmake / --use-gmake:指定构建工具(Ninja、NMake、GNU Make),默认使用系统默认工具 。
--pkg PKGNAME [PKGNAME ...]:仅构建指定的包 (如 --pkg my_package),支持单独构建单个包 。
--ignore-pkg PKGNAME [PKGNAME ...]:忽略指定包,跳过其构建过程 。
--from-pkg PKGNAME:从指定包开始构建(按依赖顺序),后续包也会被构建 。
--force-cmake:强制重新运行 CMake,忽略缓存配置 。
--cmake-args [CMAKE_ARGS ...]:传递额外的 CMake 参数(如 -DCATKIN_ENABLE_TESTING=1)。
--make-args [MAKE_ARGS ...]:传递额外的 Make 参数(如 -j4 指定并行编译线程数)

ROS系统构建工具解释对比(catkin、colcon)_catkin_make


ROS系统构建工具解释对比(catkin、colcon)_开发语言_02

3. colcon

ament 是 ROS 2 的元构建系统 ,用于替代 ROS 1 中的 catkin 系统,提供包依赖解析、构建配置生成、测试执行等功能,包含一组工具链(如 ament_cmake、ament_python),用于支持不同语言和构建类型的包。
colcon是一个通用的构建工具,负责自动化构建、测试和部署多个包的工作流。它独立于 ROS 2,但深度集成于 ROS 2 的开发流程,支持并行构建和插件扩展。换句话说,colcon 利用 ament 提供的接口(如 ament_cmake)构建 ROS 2 包,但本身不绑定于 ament 或 ROS 2,也支持ROS 1 的 catkin构建系统及纯 CMake 包。

支持跨平台(Windows/macOS)的工具,且通过插件机制可扩展功能(如测试覆盖率分析、交叉编译)。

  • 并行构建:colcon 默认并行构建包(基于 CPU 核心数),显著提升大型项目构建速度 。
  • 模块化插件机制,支持扩展功能:
    colcon-cd:快速切换到包目录。
    colcon-coveragepy:Python 代码覆盖率分析。
    colcon-lcov-result:生成 LCOV 格式覆盖率报告 。
  • 跨平台兼容性
    在 Windows 上通过 cmd 或 PowerShell 支持与 Linux/macOS 一致的构建流程,适合多平台开发 。
  • ROS 2 生态深度集成
    默认支持 ament_cmake 和 ament_python 构建类型,适配 ROS 2 的模块化架构 。
    兼容交叉编译(如嵌入式设备),openEuler Embedded 已集成此功能。
  • 开发与生产模式分离
    开发阶段使用 --symlink-install 快速测试代码修改 。
    生产阶段使用普通 colcon build 确保稳定性
build:默认构建命令 ,按依赖顺序构建所有包。
test:运行所有包的测试用例,并生成覆盖率报告。
package:打包构建产物(如生成 Debian/ROS 2 源码包)
--packages-select :仅构建指定包(支持多包并行)。
--symlink-install:使用符号链接安装文件(开发阶段推荐),修改代码后无需重新构建。
--merge-install:将所有包安装到同一目录(默认行为),而非独立路径 。