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为开头的一系列包,它其中包含了一系列的辅助函数。
下面是针对ament这一个大包中一些具体小包进行介绍。
ament_package
它提供了各种各样的ament packages的实用功能,eg:环境变量的模板
所有的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完成。
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基础设施
ament_cmake提供了CMake function和macros,它有助于创建更多的"ament CMake"包,packages的类型被"package.xml"中的
任何人都可以依赖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。