警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

关于构建系统

构建系统是一切的基础。迭代 柔荑花序 我们从 ROS 1 中创建了一套 套餐 名为 动情.将名称改为 动情 我们希望它不会与 柔荑花序 (以防万一),并防止与现有的 柔荑花序 文件。 动情的主要职责是使开发和维护 ROS 2 核心更容易 套餐.不过,这一责任也适用于任何愿意使用我们的构建系统惯例和工具的用户。此外,它还应使 套餐 这样,开发人员就可以在任何情况下 动情 根据 包装 并对其工作原理、反省方法以及构建或使用方法做出一些假设。

动情 由几个重要的资源库组成,它们都位于 动情 GitHub 组织:

"(《世界人权宣言》) ament_package 包装

位于 GitHubament/ament_package,该资源库包含一个 Python 软件包 提供各种实用程序 套餐例如,环境钩子模板。

全部 套餐 必须包含一个 package.xml 文件位于软件包根目录下,与底层构建系统无关。文件 package.xml "清单 "文件包含处理和运行一个 包装.这 包装 信息包括以下内容 包装的名称(全局唯一)以及软件包的依赖关系。软件包的 package.xml 文件也是标记文件,用于指示 包装 在文件系统上。

解析 package.xml 文件由 catkin_pkg (的功能(如 ROS 1),而定位 套餐 通过在文件系统中搜索这些 package.xml 文件由构建工具提供,例如 胶管.

package.xml

软件包清单文件 包装 的元信息 包装 包括名称、版本、描述、维护者、许可证、依赖关系等。清单内容采用机器可读的 XML 格式,其内容在 REPs 127140今后有可能进一步修改 REPs.

因此,无论何时 包装 被称为 套餐,这意味着它是一个单一的软件单元(源代码、构建文件、测试、文档和其他资源),使用 package.xml 清单文件。

套餐

任何 包装 其中包含一个 package.xml 并遵循 动情无论底层构建系统是什么。

由于 套餐 与构建系统无关,因此可以有不同类型的 套餐例如 改进 CMake 软件包, Python 软件包等等

下面列出了在软件栈中可能遇到的常见软件包类型:

CMake 软件包

任何 包装 包含一个纯 CMake 项目和一个 package.xml 清单文件。

改进 CMake 软件包

A CMake 软件包 也遵循 动情 包装指南。

Python 软件包

任何 包装 含有 设置工具 基于 Python 的项目和一个 package.xml 清单文件。

Python 软件包

A Python 软件包 也遵循 动情 包装指南。

"(《世界人权宣言》) ament_cmake 存储库

位于 GitHubment/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 基础架构,这些基础架构可以在 套餐 使用传统接口。这使得 套餐 有更多与其他 套餐促进它们的重复使用,并鼓励在不同的构建系统中形成惯例。 套餐.例如,它提供了一种标准的方法,可在 套餐 这样,这些信息的消费者就能以常规方式获取这些信息。

"(《世界人权宣言》) ament_cmake_core 包装 还提供了 动情 它允许你将源代码空间或编译空间中的文件符号链接到安装空间,而不是复制它们。这样就可以安装一次,然后编辑 Python 代码和配置文件等非生成资源,而不必重新运行安装步骤使其生效。该功能基本上取代了 柔荑花序 因为它具有大多数优点,而很少有复杂性或缺点。

提供的另一项功能是 ament_cmake_core包装 资源索引是 套餐 来表示它们包含某种类型的资源。这一功能的设计使回答简单问题的效率大大提高,例如 套餐 在此前缀中(例如 /usr/local),因为它只要求你列出该前缀下单个可能位置的文件。有关此功能的更多信息,请参阅 设计文档 为资源索引。

喜欢 柔荑花序, ament_cmake_core 还提供环境设置文件和 包装 特定的环境钩子。环境设置文件通常命名为 setup.bash包装 开发人员可以确定对环境所需的更改,以便利用他们的 包装.开发人员可以使用 "环境钩子 "来实现这一功能。"环境钩子 "基本上是一段任意的 shell 代码,可以设置或修改环境变量、定义 shell 函数、设置自动完成规则等。 罗斯_迪斯特罗 环境变量,而无需 柔荑花序 对 ROS 分布一无所知。

"(《世界人权宣言》) ament_lint 存储库

位于 GitHubment/ament_lint该资源库提供了多个 套餐 它们以方便、一致的方式提供着色和测试服务。目前有 套餐 来支持 C++ 风格的内衬,使用 去壳,使用静态 C++ 代码检查 cppcheck检查源代码中的版权,使用 pep8等等。未来,辅助软件包的数量可能还会增加。

构建工具

构建工具只需调用一次,就能一次性完成构建工作区软件包的任务。在 ROS 2 Ardent 及以下版本中,提供这一功能的构建工具称为 工具.截至 ROS 2 Bouncy、 工具 已被 胶管通用构建工具文章.