您正在阅读的是旧版本但仍受支持的 ROS 2 文档。 Jazzy.
构建系统
构建系统允许开发人员根据需要构建 ROS 2 代码。ROS 2 在很大程度上依赖于将代码划分为多个软件包,每个软件包都包含一个清单文件(manifest file)。package.xml
).该清单文件包含软件包的基本元数据,包括与其他软件包的依赖关系。元编译工具需要此清单才能运行。
ROS 2 构建系统由 3 个主要概念组成。
构建工具
这是控制单个软件包编译和测试的软件。在 ROS 2 中,C++ 通常使用 CMake,Python 通常使用 setuptools,但也支持其他编译工具。
建造帮手
这些都是与构建工具挂钩的辅助函数,可为开发者带来更好的体验。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 中,名为 胶管 用于此。