您正在阅读的是旧版本但仍受支持的 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 包装

位于 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

  • 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 知识库

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

元构建工具

这是一个软件,它知道如何对一组软件包进行拓扑排序,并按照正确的依赖顺序构建或测试它们。该软件将调用构建工具来完成编译、测试和安装软件包的实际工作。

在 ROS 2 中,名为 胶管 用于此。