原地址:https://www.cnblogs.com/qixianyu/p/6669687.html
目录
该软件包清单是一个XML文件名为package.xml中必须包括与任何兼容包的根文件夹。此文件定义有关包的属性,例如包名称,版本号,作者,维护者以及其他catkin包的依赖关系。请注意,这个概念类似于传统rosbuild构建系统中使用的manifest.xml文件。
您的系统包依赖关系在package.xml中声明。如果缺少或不正确,您可能可以从源代码构建,并在自己的机器上运行测试,但是当发布到ROS社区时,您的软件包将无法正常工作。其他依赖于这些信息来安装他们使用您的软件包所需的软件。
这是新软件包的推荐格式。还建议将较旧的格式1包迁移为格式2.有关从格式1迁移到格式2的说明,请参阅catkin API文档中的从格式1迁移到格式2 。
格式2的完整文档可以在catkin API文档中找到。更多信息可以在REP 140 - Package Manifest Format Two Specification中找到。
每个package.xml文件都有
package>
有一小部分标签需要嵌套在
例如,这里是一个名为foo_core的虚构包的包清单。
foo_core 1.2.4 This package provides foo capability. Ivana Bildbotz BSD
具有最小标签的包清单不指定对其他包的任何依赖关系。软件包可以有六种依赖关系:
构建依赖关系指定构建此包所需的包。在构建时需要这些软件包中的任何文件时才是这种情况。这可以包括在编译时的头文件,链接到这些包的库文件或在构建时需要任何其他资源(特别是当这些包在CMake 中是find_package()时)。在交叉编译场景中,构建依赖关系针对目标体系结构。
构建导出依赖关系指定根据此包构建库所需的包。当您将此头文件包含在此包中的公用头文件中时(特别是当CMake中的catkin_package()中声明为(CATKIN_DEPENDS 时),就是这种情况。
执行依赖关系指定在此程序包中运行代码所需的软件包。当您依赖此程序包中的共享库(尤其是当CMake 中的catkin_package()中声明为(CATKIN_DEPENDS )时),就是这种情况。
测试依赖关系仅指定单元测试的附加依赖项。他们不应该将已经提到的任何依赖关系重复为构建或运行依赖关系。
构建工具依赖关系指定此软件包需要构建自身的构建系统工具。通常唯一的构建工具是catkin。在交叉编译场景中,构建工具依赖关系用于执行编译的架构。
文档工具依赖关系指定此软件包需要生成文档的文档工具。
这六种依赖关系使用以下相应的标签来指定:
所有包至少有一个依赖关系,构建工具依赖于catkin,如下例所示。
foo_core 1.2.4 This package provides foo capability. Ivana Bildbotz BSD catkin
指定构建,执行,测试和文档依赖关系的更现实的示例可能如下所示。
foo_core 1.2.4 This package provides foo capability. Ivana Bildbotz BSD http://ros.org/wiki/foo_core Ivana Bildbotz catkin roscpp std_msgs message_generation message_runtime rospy python-mock doxygen
关于依赖关系的更多细节可以在这里的 catkin API文档中找到。
将多个软件包分组为单个逻辑软件包通常很方便。这可以通过metapackages来实现。元包是在package.xml中具有以下导出标记的普通包:
export>
除了所要求的
另外,metapackage有一个必需的,样板CMakeLists.txt文件:
cmake_minimum_required(VERSION 2.8.3) project() find_package(catkin REQUIRED) catkin_metapackage()
注意:将
旧的catkin pakages使用格式1.如果
package.xml的格式很简单。
每个package.xml文件都有
有一小部分标签需要嵌套在
例如,这里是一个名为foo_core的虚构包的包清单。
foo_core 1.2.4 This package provides foo capability. Ivana Bildbotz BSD
具有最小标签的包清单不指定对其他包的任何依赖关系。软件包可以有四种依赖关系:
构建工具依赖关系指定此软件包需要构建自身的构建系统工具。通常唯一的构建工具是catkin。在交叉编译场景中,构建工具依赖关系用于执行编译的架构。
构建依赖关系指定构建此包所需的包。在构建时需要这些软件包中的任何文件时才是这种情况。这可以包括这些包在编译时的标头,链接到这些包的库或在构建时需要任何其他资源(特别是当这些包在CMake 中是find_package())时)。在交叉编译场景中,构建依赖关系针对目标体系结构。
运行依赖关系指定在此程序包中运行代码所需的软件包,或针对此软件包构建库。在这种情况下,您依赖于共享库或将其头部包含在此包中的公头中(特别是当这些包在CMake 中的catkin_package()中声明为(CATKIN_DEPENDS)时)。
测试依赖关系仅指定单元测试的附加依赖项。他们不应该将已经提到的任何依赖关系重复为构建或运行依赖关系。
这四种类型的依赖关系使用以下相应的标签来指定:
所有包至少有一个依赖关系,构建工具依赖于catkin,如下例所示。
foo_core 1.2.4 This package provides foo capability. Ivana Bildbotz BSD catkin
指定构建,运行时和测试依赖关系的更实际的示例可能如下所示。
foo_core 1.2.4 This package provides foo capability. Ivana Bildbotz BSD http://ros.org/wiki/foo_core Ivana Bildbotz catkin message_generation roscpp std_msgs message_runtime roscpp rospy std_msgs python-mock
有关依赖关系的更多细节可以在这里找到。
将多个软件包分组为单个逻辑软件包通常很方便。这可以通过metapackages来实现。元包是在package.xml中具有以下导出标记的普通包:
除了所要求的
cmake_minimum_required(VERSION 2.8.3) project() find_package(catkin REQUIRED) catkin_metapackage()
注意:将
最后来一个小海龟的package.xlm的例子
turtlesim 0.5.5 turtlesim is a tool made for teaching ROS and ROS packages. Dirk Thomas BSD http://www.ros.org/wiki/turtlesim https://github.com/ros/ros_tutorials/issues https://github.com/ros/ros_tutorials Josh Faust catkin geometry_msgs libqt4-dev message_generation qt4-qmake rosconsole roscpp roscpp_serialization roslib rostime std_msgs std_srvs geometry_msgs libqt4 message_runtime rosconsole roscpp roscpp_serialization roslib rostime std_msgs std_srvs