警告
您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.
关于构建系统
构建系统是一切的基础。迭代 柔荑花序
从 ROS 1 中,我们创建了一套 套餐 名为 动情
.将名称改为 动情
我们希望它不会与 柔荑花序
(以防我们在某些时候将它们混合使用),并防止与现有的 柔荑花序
文件。
动情
的主要职责是使开发和维护 ROS 2 核心更容易 套餐.不过,这一责任也适用于任何愿意使用我们的构建系统惯例和工具的用户。此外,它还应使 套餐 这样,开发人员就可以在任何情况下 动情
根据 包装 并对其工作原理、反省方法以及构建或使用方法做出一些假设。
动情
由几个重要的资源库组成,它们都位于 动情
GitHub 组织:
"(《世界人权宣言》) ament_package
包装
位于 GitHub 于 ament/ament_package,该资源库包含一个 Python 软件包 提供各种实用程序 套餐例如,环境钩子模板。
全部 套餐 必须包含一个 package.xml 文件位于软件包根目录下,与底层构建系统无关。文件 package.xml "清单 "文件包含处理和运行一个 包装.这 包装 信息包括以下内容 包装的名称(全局唯一)以及软件包的依赖关系。软件包的 package.xml 文件也是标记文件,用于指示 包装 在文件系统上。
解析 package.xml 文件由 catkin_pkg
(的功能(如 ROS 1),而定位 套餐 通过在文件系统中搜索这些 package.xml 文件由构建工具提供,例如 胶管
.
- package.xml
软件包清单文件 包装 的元信息 包装 包括名称、版本、描述、维护者、许可证、依赖关系等。清单内容采用机器可读的 XML 格式,其内容在 REPs 127 和 140今后有可能进一步修改 REPs.
因此,无论何时 包装 被称为 套餐,这意味着它是一个单一的软件单元(源代码、构建文件、测试、文档和其他资源),使用 package.xml 清单文件。
- 套餐
任何 包装 其中包含一个 package.xml 并遵循
动情
无论底层构建系统是什么。
由于 套餐 与构建系统无关,因此可以有不同类型的 套餐例如 改进 CMake 软件包, Python 软件包等等
下面列出了在软件栈中可能遇到的常见软件包类型:
- CMake 软件包
任何 包装 包含一个纯 CMake 项目和一个 package.xml 清单文件。
- 改进 CMake 软件包
A CMake 软件包 也遵循
动情
包装指南。- Python 软件包
任何 包装 含有 设置工具 基于 Python 的项目和一个 package.xml 清单文件。
- Python 软件包
A Python 软件包 也遵循
动情
包装指南。
"(《世界人权宣言》) ament_cmake
存储库
位于 GitHub 于 ment/ament_cmake该资源库包含许多 "ment CMake "和纯 CMake 软件包,它们提供了创建 "ment CMake "软件包所需的 CMake 基础架构。在这里,"ment CMake "软件包指的是: 动情
的软件包。因此 套餐 提供了必要的 CMake 函数/宏和 CMake 模块,以方便创建更多的 "改进型 CMake"(或 ament_cmake
) 软件包。这种类型的软件包用 <build_type>ment_cmake</build_type>;
中的 <export>;
的 package.xml 锉刀
"(《世界人权宣言》) 套餐 模块化程度极高,但有一个 "瓶颈" 包装 人称 ament_cmake
.任何人都可以依靠 ament_cmake
包装 的所有综合功能。 套餐 在该版本库中。这里列出了 套餐 以及简短说明:
ament_cmake
将所有其他 套餐 用户只需依赖该版本库中的
ament_cmake_auto
提供了方便的 CMake 函数,可自动处理编写 包装's
CMakeLists.txt
文件
ament_cmake_core
的所有内置核心概念。
动情
例如环境钩子、资源索引、符号链接安装等
ament_cmake_gmock
为基于 gmock 的单元测试添加便利函数
ament_cmake_gtest
为基于 gtest 的自动测试添加便利函数
ament_cmake_nose
为基于 nosetests 的 python 自动测试添加便利函数
ament_cmake_python
的 CMake 函数。 套餐 包含 Python 代码
ament_cmake_test
将不同类型的测试(如 gtest 和 nosetests)聚合在一个目标下,使用 CTest
"(《世界人权宣言》) ament_cmake_core
包装 包含了大量 CMake 基础架构,这些基础架构可以在 套餐 使用传统接口。这使得 套餐 有更多与其他 套餐促进它们的重复使用,并鼓励在不同的构建系统中形成惯例。 套餐.例如,它提供了一种标准方式,可在.NET Framework 3.0 和.NET Framework 4.0 之间传递 include 目录、库、定义和依赖关系。 套餐 这样,这些信息的消费者就能以常规方式获取这些信息。
"(《世界人权宣言》) ament_cmake_core
包装 还提供了 动情
它允许你将源代码空间或编译空间中的文件符号链接到安装空间,而不是复制它们。这样就可以安装一次,然后编辑 Python 代码和配置文件等非生成资源,而不必重新运行安装步骤使其生效。该功能基本上取代了 柔荑花序
因为它具有大多数优点,而很少有复杂性或缺点。
提供的另一项功能是 ament_cmake_core
是 包装 资源索引是 套餐 来表示它们包含某种类型的资源。这一功能的设计使回答简单问题的效率大大提高,例如 套餐 在此前缀中(例如 /usr/local
),因为它只要求你列出该前缀下单个可能位置的文件。有关此功能的更多信息,请参阅 设计文档 为资源索引。
喜欢 柔荑花序
, ament_cmake_core
还提供环境设置文件和 包装 特定的环境钩子。环境设置文件通常命名为 setup.bash
是 包装 开发人员可以确定对环境所需的更改,以便利用他们的 包装.开发人员可以使用 "环境钩子 "来实现这一功能。"环境钩子 "基本上是一段任意的 shell 代码,可以设置或修改环境变量、定义 shell 函数、设置自动完成规则等。 罗斯_迪斯特罗
环境变量,而无需 柔荑花序
对 ROS 分布一无所知。
"(《世界人权宣言》) ament_lint
存储库
位于 GitHub 于 ment/ament_lint该资源库提供了多个 套餐 它们以方便、一致的方式提供着色和测试服务。目前有 套餐 来支持 C++ 风格的内衬,使用 去壳
,使用静态 C++ 代码检查 cppcheck
检查源代码中的版权,使用 pep8
等等。未来,辅助软件包的数量可能还会增加。
构建工具
构建工具只需调用一次,就能一次性完成构建工作区软件包的任务。在 ROS 2 Ardent 及以下版本中,提供这一功能的构建工具称为 工具
.截至 ROS 2 Bouncy、 工具
已被 胶管
如 通用构建工具文章.