赞
踩
目录
构建工具
构建助手
ament_package
包
ament_cmake
仓库
ament_lint
仓库
元构建工具
构建系统是允许开发人员根据需要构建其 ROS 2 代码的工具。ROS 2 在很大程度上依赖于将代码划分为包,每个包都包含一个清单文件 ( package.xml
)。此清单文件包含有关包的基本元数据,包括其对其他包的依赖性。此清单是元构建工具正常运行所必需的。
ROS 2 构建系统由三个主要概念组成。
这是控制单个包的编译和测试的软件。在 ROS 2 中,这通常是 C++ 的 CMake 和 Python 的 setuptools,但也支持其他构建工具。
这些是挂钩到构建工具以改善开发者体验的辅助函数。ROS 2 包通常依赖于 ament
系列包。 ament
由几个重要的存储库组成,这些存储库都在 GitHub 组织中。
ament_package
包位于 GitHub 上的 ament/ament_package,此存储库包含一个 ament Python 包,该包提供了各种 ament 包的实用程序,例如环境钩子的模板。
所有 ament 包必须包含一个位于包根目录的单一 package.xml 文件,无论其底层构建系统如何。package.xml “清单”文件包含处理和操作包所需的信息。此包信息包括包的名称(全局唯一)和包的依赖项。package.xml 文件还充当标记文件,指示包在文件系统上的位置。
package.xml 文件的解析由 catkin_pkg
提供(如在 ROS 1 中),而通过搜索文件系统中的这些 package.xml 文件来定位包的功能由 colcon
等构建工具提供。
package.xml
包清单文件标记包的根目录,并包含有关包的元信息,包括其名称、版本、描述、维护者、许可证、依赖项等。清单的内容是机器可读的 XML 格式,内容在 REPs 127 和 140 中描述,并且在未来的 REPs 中可能会进一步修改。
因此,任何时候某个包被称为 ament 包,这意味着它是一个软件单元(源代码、构建文件、测试、文档和其他资源),这些资源是使用 package.xml 清单文件描述的。
ament 包
任何包含 package.xml 并遵循 ament
的打包指南的包,无论底层构建系统如何。
由于术语 ament 包与构建系统无关,因此可以有不同种类的 ament 包,例如 ament CMake 包,ament Python 包等。
以下是您在此软件堆栈中可能遇到的常见包类型列表:
CMake 包
任何包含普通 CMake 项目和 package.xml 清单文件的包。
ament CMake 包
一个遵循 ament
打包指南的 CMake 包。
Python 包
任何包含基于 setuptools 的 Python 项目和 package.xml 清单文件的包。
ament Python 包
一个也遵循 ament
打包指南的 Python 包。
ament_cmake
存储库 位于 GitHub 上的 ament/ament_cmake,这个仓库包含许多“ament CMake”和纯 CMake 包,这些包提供了在 CMake 中创建“ament CMake”包所需的基础设施。在此上下文中,“ament CMake”包的意思是: ament
使用 CMake 构建的包。因此,这个仓库中的包提供了必要的 CMake 函数/宏和 CMake 模块,以便于创建更多的“ament CMake”(或 ament_cmake
)包。这种类型的包在 package.xml 文件的 <export>
标签中的 <build_type>ament_cmake</build_type>
标签中被标识。
此存储库中的软件包非常模块化,但有一个名为 ament_cmake
的“瓶颈”软件包。任何人都可以依赖 ament_cmake
软件包来获取此存储库中所有软件包的聚合功能。以下是存储库中软件包的列表以及简短描述:
ament_cmake
汇总此存储库中的所有其他包,用户只需依赖此包即可
ament_cmake_auto
提供方便的 CMake 函数,自动处理编写包的 CMakeLists.txt
文件时许多繁琐的部分
ament_cmake_core
提供所有内置的核心概念给 ament
,例如环境钩子、资源索引、符号链接安装等。
ament_cmake_gmock
添加方便的函数以进行基于 gmock 的单元测试
ament_cmake_gtest
添加了用于制作基于 gtest 的自动化测试的便利功能
ament_cmake_nose
添加方便的功能以进行基于 nosetests 的 python 自动化测试
ament_cmake_python
提供包含 Python 代码的包的 CMake 函数
请参阅 ament_cmake_python 用户文档
ament_cmake_test
汇总不同种类的测试,例如 gtest 和 nosetests,在使用 CTest 的单个目标下
ament_cmake_core
包含了大量的 CMake 基础设施,使得可以通过常规接口在包之间干净地传递信息。这使得包与其他包的构建接口更加解耦,促进了它们的重用,并鼓励在不同包的构建系统中采用约定。例如,它提供了一种标准方式来传递包含目录、库、定义和依赖项,以便这些信息的使用者可以以常规方式访问这些信息。
ament_cmake_core
包还提供了 ament
构建系统的功能,如符号链接安装,允许您将文件从源空间或构建空间符号链接到安装空间,而不是复制它们。这使您可以安装一次,然后编辑非生成资源(如 Python 代码和配置文件),而无需重新运行安装步骤即可生效。此功能本质上取代了 catkin
的“开发空间”,因为它具有大多数优点且几乎没有复杂性或缺点。
ament_cmake_core
提供的另一个功能是包资源索引,这是一种让包指示它们包含某种类型资源的方法。该功能的设计使得回答简单问题(例如, /usr/local
中有哪些包)更加高效,因为它只需要列出该前缀下单个可能位置的文件。您可以在资源索引的设计文档中阅读有关此功能的更多信息。
像 catkin
一样, ament_cmake_core
也提供环境设置文件和特定于包的环境钩子。环境设置文件通常命名为 setup.bash
,是包开发人员定义环境更改以使用其包的地方。开发人员可以使用“环境钩子”来做到这一点,环境钩子基本上是一段任意的 shell 代码,可以设置或修改环境变量,定义 shell 函数,设置自动完成规则等……例如,ROS 1 就是通过这种功能在 catkin
对 ROS 发行版一无所知的情况下设置了 ROS_DISTRO
环境变量。
ament_lint
存储库 位于 GitHub 上的 ament/ament_lint,这个仓库提供了几个包,这些包以方便和一致的方式提供 linting 和测试服务。目前有支持 C++ 风格 linting 的包,使用 uncrustify
进行静态 C++ 代码检查,检查源代码中的版权,使用 pep8
进行 Python 风格 linting,以及其他功能。辅助包的列表可能会在未来增加。
这是一款能够拓扑排序一组软件包,并按正确的依赖顺序构建或测试它们的软件。该软件将调用构建工具来完成编译、测试和安装软件包的实际工作。
在 ROS 2 中,名为 colcon https://colcon.readthedocs.io/en/released/ 的工具用于此目的。
https://docs.ros.org/en/jazzy/Concepts/Advanced/About-Build-System.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。