catkin_make与catkin build的关系与区别(使用catkin build的好处)
在这篇文章中,我们来详细解释一下 python3-catkin-tools
这个软件包的作用以及catkin_make与catkin build的关系与区别。
简单来说,这是一个对 ROS1(机器人操作系统第一版)开发者来说极其重要且强烈推荐的工具包。
一句话总结
python3-catkin-tools
提供了一套名为 catkin_tools
的现代化命令行工具,它是 ROS1 默认构建工具 catkin_make
的一个功能更强大、速度更快、用户体验更好的替代品。
核心作用:构建 ROS1 的软件包
在 ROS1 中,所有的源代码都必须经过一个叫做 Catkin 的构建系统进行编译、链接,最终生成可执行文件、库文件等。
最初,ROS 提供的官方工具是 catkin_make
。虽然它能完成工作,但存在一些缺点:
- 工作空间混乱:它会在你的工作空间根目录下创建
build
和devel
两个文件夹,所有包的编译中间文件和最终产物都混在这两个文件夹里,难以管理和清理。 - 串行编译:它默认是一个一个地编译你的软件包,如果你的工作空间里有几十个包,速度会很慢。
- 用户界面不友好:输出信息杂乱,且功能单一。
为了解决这些问题,社区开发了 catkin_tools
。python3-catkin-tools
就是这个工具针对 Python 3 环境的 apt
软件包名。(在早期的 Ubuntu/ROS 版本如 18.04/Melodic,你可能会安装 python-catkin-tools
,它对应 Python 2)。
catkin_tools
vs. catkin_make
(关键区别)
这个对比能让你最直观地理解它的价值:
特性 | catkin_make (旧工具) | catkin_tools (新工具,由本包提供) | 优势说明 |
---|---|---|---|
核心命令 | catkin_make | catkin build | 命令更具描述性,build 只是其功能之一。 |
工作空间布局 | 在工作空间根目录创建 build 和 devel 文件夹。 | 在工作空间根目录创建 build , devel , logs , install 文件夹。每个包的编译都在各自的子文件夹中隔离进行。 | 这是最大优势! 布局清晰,不会互相污染。你可以安全地单独清理某个包的编译缓存,而不会影响其他包。 |
编译过程 | 默认串行编译,速度较慢。 | 默认并行编译,充分利用多核 CPU 资源。 | 编译速度显著提升,尤其是在大型工作空间中。 |
用户界面 | 输出信息是滚动的原始 make 日志,杂乱无章。 | 用户界面非常友好。它会整齐地列出每个包的编译状态([BUILDING], [DONE], [FAILED]),并有进度条。 | 输出清晰直观,能快速定位哪个包编译失败,失败日志也单独存放,易于查找。 |
功能丰富度 | 功能单一,主要就是编译。 | 提供了一整套工作流工具,如 catkin clean , catkin list , catkin config 等。 | 提供了清理、配置、查看等全方位的项目管理能力。 |
配置灵活性 | 难以方便地切换编译配置(如 Debug/Release)。 | 支持构建配置文件 (Profiles)。你可以轻松创建和切换不同的配置(如 debug, release, release-with-asserts)。 | 极大地便利了开发和调试,一键切换不同的编译选项。 |
catkin_tools
的主要命令
安装 python3-catkin-tools
后,你就可以在你的 ROS1 Catkin 工作空间中使用以下命令:
-
初始化工作空间 (
catkin init
)- 在一个空的工作空间目录运行,它会创建一个标记,告诉
catkin_tools
这是一个有效的工作空间。
- 在一个空的工作空间目录运行,它会创建一个标记,告诉
-
构建包 (
catkin build
)catkin build
: 编译工作空间里的所有包。catkin build <package_name>
: 只编译指定的包及其依赖。catkin build --this
: 只编译当前目录下的包。
-
清理工作空间 (
catkin clean
)catkin clean
: 删除build
,devel
,logs
等所有生成的文件,非常彻底。catkin clean <package_name>
: 只清理指定包的编译产物,而不影响其他包!这是catkin_make
无法做到的。
-
配置工作空间 (
catkin config
)catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
: 为工作空间设置 CMake 参数,例如切换到 Release 模式进行编译。catkin config -l
: 列出当前的所有配置。
-
查看工作空间 (
catkin list
)- 列出当前工作空间中所有的包。
它与 ROS2 的关系
值得注意的是,Catkin 是 ROS1 的构建系统。catkin_tools
是用于 ROS1 的。
ROS2 引入了一个全新的、更通用的构建系统叫做 colcon
(Collective Construction)。colcon
的设计哲学在很大程度上借鉴了 catkin_tools
的成功经验,比如并行构建、清晰的日志输出等。所以,如果你熟悉 catkin_tools
,你会发现上手 colcon
非常容易。
总结
python3-catkin-tools
是一个为 ROS1 开发者准备的生产力工具。它通过提供 catkin build
等一系列命令,彻底革新了 ROS1 的开发工作流,带来了更快的编译速度、更清晰的工作空间管理和更友好的用户交互。
对于任何还在使用 ROS1 (尤其是 Noetic) 的开发者来说,从 catkin_make
切换到 catkin_tools
是一个毫无疑问的正确选择。