ROS2的构建系统

原文参考

ROS2的构建系统由3个主要概念组成,分别是

  • Build tool
  • Build helpers
  • Meta-build tools

Build tool

它是负责编译和测试package软件包的工具,在ROS2中,对于每一个编程语言,都会有不一样的工具

  • cpp--cmake
  • Python--setuptools
  • ...

Build helpers

Build helpers中有一系列与构建工具(Build tool)相关联的辅助函数,它存在的目的是为了帮助开发人员提高开发效率,ROS2的package包通常依赖ament为开头的一系列包,它其中包含了一系列的辅助函数。

img

源码包地址: ament · GitHub

下面是针对ament这一个大包中一些具体小包进行介绍。

ament_package

它提供了各种各样的ament packages的实用功能,eg:环境变量的模板

img

所有的ament packages包必须在其package包的根目录下包含一个"package.xml"文件,无论它的底层构建工具是什么Build tool。

package.xml

"package.xml"具有两种功能

  • "package.xml"是一份清单文件,它包含现在的package功能包在构建、编译、运行等环节所需要的信息。
  • "package.xml"文件还充当标记文件,指示package包在文件系统上的位置,方便ros2的命令工具寻找。

对于"package.xml"的文件的解析是由catkin_pkg完成,而通过"package.xml"文件的定位到package功能包的在文件系统中的位置是由(build tool)构建工具---colcon完成。

"package.xml"的文件内容是由XML格式组成,它的内容信息由REPs 127REPs 140这两份文档设计

ament package

无论底层的构建系统是什么样的,只要package包含一份"package.xml"文件和遵循ament的打包规则,那它就是一个ament package

因为ament package与构建系统没有关系,因此可以细分ament packages

  • ament cmake packages
  • ament Python packages
  • etc

常见的package包类型

描述单个软件单元(源代码、构建文件、测试、文档和其他资源)

  • CMake package: 一个普通的CMake工程和包含"package.xml"文件清单
  • ament CMake package: CMake packsge + 遵循ament的打包规则
  • Python package:基于setuptools的python项目和一份"package.xml"文件清单
  • ament Python package: Python package + 遵循ament的打包规则

ament_cmake

ament_cmake包包含了许多"ament cmake"和纯"CMake"包,提供了创建"ament cmake"包所需的CMake基础设施

img

ament_cmake提供了CMake function和macros,它有助于创建更多的"ament CMake"包,packages的类型被"package.xml"中的标签识别--<build_type>####</build_type>

img

任何人都可以依赖ament_cmake包来获取此功能库中包的功能,下面是ament_cmake软件包中列表及其简短描述:

  • ament_cmake: 集合了这个软件包中其他的package包,使用者只需要依赖这个包就够了,等同于依赖了所有包
  • ament_cmake_auto: 提供了一些便捷的Cmake Functions,它自动处理了大量的package中CMakeLists.txt中繁琐的部分
  • ament_cmake_core: 提供了大量的ament的built-in核心概念,e.g:环境钩子、资源索引、安装后(install目录下)或其他安装方式的符号链接
  • ament_cmake_gmock: 增加了一些基于gmock单元测试便捷函数
  • ament_cmake_gtest:增加了一些基于gtest自动测试的便捷函数
  • ament_cmake_nose:增加了一些基于nosetests的python自动测试函数
  • ament_cmake_python: 1.提供了包含python代码的packages的CMake Functions. 2. ament_cmake_python user documentation
  • ament_cmake_test:集合了各种测试框架,eg: gtest和nosetests在CTest

ament_cmake_core package包含大量的CMake 基础设施,它是这里面的核心,提供了一种标准方法传递包含目录、库、定义和包之间的依赖关系。

它允许你将文件从源空间或构建空间符号链接到安装空间,而不是复制它们。

ament_cmake_core提供的另一个功能是包资源索引,这是包指示它们包含某种类型的资源的一种方式,这种设计使得回答一些简单的问题,像包资源的信息,会更有效一些,详情阅读design docs

ament_lint

提供一些代码检测lint功能,当前,

  • 有一些包支持C++风格linting,使用uncrustify
  • 静态C++代码检测使用cppcheck
  • python风格linting使用pep8
  • other

Meta-Build tool

该软件将调用构建工具来完成编译、测试和安装包的实际工作,在ROS2中,这个工具tool被命名为colcon。

posted on 2024-03-15 09:11  Getone超  阅读(24)  评论(0编辑  收藏  举报