多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 2.5 package.xml `package.xml`也是一个catkin的package必备文件,它是这个软件包的描述文件,在较早的ROS版本\(rosbuild编译系统\)中,这个文件叫做`manifest.xml`,用于描述pacakge的基本信息。如果你在网上看到一些ROS项目里包含着`manifest.xml`,那么它多半是hydro版本之前的项目了。 ## 2.5.1 package.xml作用 `pacakge.xml`包含了package的名称、版本号、内容描述、维护人员、软件许可、编译构建工具、编译依赖、运行依赖等信息。 实际上`rospack find`、`rosdep`等命令之所以能快速定位和分析出package的依赖项信息,就是直接读取了每一个pacakge中的`package.xml`文件。它为用户提供了快速了解一个pacakge的渠道。 ## 2.5.2 package.xml写法 `pacakge.xml`遵循xml标签文本的写法,由于版本更迭原因,现在有两种格式并存(format1与format2),不过区别不大。老版本(format1)的`pacakge.xml`通常包含以下标签: ```xml <pacakge> 根标记文件 <name> 包名 <version> 版本号 <description> 内容描述 <maintainer> 维护者 <license> 软件许可证 <buildtool_depend> 编译构建工具,通常为catkin <build_depend> 编译依赖项,与Catkin中的 <run_depend> 运行依赖项 ``` 说明:其中1-6为必备标签,1是根标签,嵌套了其余的所有标签,2-6为包的各种属性,7-9为编译相关信息。 在新版本(format2)中,包含的标签为: ```xml <pacakge> 根标记文件 <name> 包名 <version> 版本号 <description> 内容描述 <maintainer> 维护者 <license> 软件许可证 <buildtool_depend> 编译构建工具,通常为catkin <depend> 指定依赖项为编译、导出、运行需要的依赖,最常用 <build_depend> 编译依赖项 <build_export_depend> 导出依赖项 <exec_depend> 运行依赖项 <test_depend> 测试用例依赖项 <doc_depend> 文档依赖项 ``` 由此看见新版本的`pacakge.xml`格式上增加了<depend> 、<build_export_depend>、<exec_depend>、<doc_depend> ,相当于将之前的build和run依赖项描述进行了细分。 目前Indigo、Kinetic、Lunar等版本的ROS都同时支持两种版本的`package.xml`,所以无论选哪种格式都可以。 ## 2.5.3 pacakge.xml例子 为了说明pacakge.xml写法,还是以turtlesim软件包为例,其`pacakge.xml`文件内容如下,我们添加了相关的注释: ```xml <?xml version="1.0"?> <!--本示例为老版本的pacakge.xml--> <package> <!--pacakge为根标签,写在最外面--> <name>turtlesim</name> <version>0.8.1</version> <description> turtlesim is a tool made for teaching ROS and ROS packages. </description> <maintainer email="dthomas@osrfoundation.org">Dirk Thomas</maintainer> <license>BSD</license> <url type="website">http://www.ros.org/wiki/turtlesim</url> <url type="bugtracker">https://github.com/ros/ros_tutorials/issues</url> <url type="repository">https://github.com/ros/ros_tutorials</url> <author>Josh Faust</author> <!--编译工具为catkin--> <buildtool_depend>catkin</buildtool_depend> <!--编译时需要依赖以下包--> <build_depend>geometry_msgs</build_depend> <build_depend>qtbase5-dev</build_depend> <build_depend>message_generation</build_depend> <build_depend>qt5-qmake</build_depend> <build_depend>rosconsole</build_depend> <build_depend>roscpp</build_depend> <build_depend>roscpp_serialization</build_depend> <build_depend>roslib</build_depend> <build_depend>rostime</build_depend> <build_depend>std_msgs</build_depend> <build_depend>std_srvs</build_depend> <!--运行时需要依赖以下包--> <run_depend>geometry_msgs</run_depend> <run_depend>libqt5-core</run_depend> <run_depend>libqt5-gui</run_depend> <run_depend>message_runtime</run_depend> <run_depend>rosconsole</run_depend> <run_depend>roscpp</run_depend> <run_depend>roscpp_serialization</run_depend> <run_depend>roslib</run_depend> <run_depend>rostime</run_depend> <run_depend>std_msgs</run_depend> <run_depend>std_srvs</run_depend> </package> ``` 以上内容是老版本(format1)的写法,如果要写成新版本(format2)则可以改为: ```xml <?xml version="1.0"?> <package format="2"> <!--在声明pacakge时指定format2,为新版格式--> <name>turtlesim</name> <version>0.8.1</version> <description> turtlesim is a tool made for teaching ROS and ROS packages. </description> <maintainer email="dthomas@osrfoundation.org">Dirk Thomas</maintainer> <license>BSD</license> <url type="website">http://www.ros.org/wiki/turtlesim</url> <url type="bugtracker">https://github.com/ros/ros_tutorials/issues</url> <url type="repository">https://github.com/ros/ros_tutorials</url> <author>Josh Faust</author> <!--编译工具为catkin--> <buildtool_depend>catkin</buildtool_depend> <!--用depend来整合build_depend和run_depend--> <depend>geometry_msgs</depend> <depend>rosconsole</depend> <depend>roscpp</depend> <depend>roscpp_serialization</depend> <depend>roslib</depend> <depend>rostime</depend> <depend>std_msgs</depend> <depend>std_srvs</depend> <!--build_depend标签未变--> <build_depend>qtbase5-dev</build_depend> <build_depend>message_generation</build_depend> <build_depend>qt5-qmake</build_depend> <!--run_depend要改为exec_depend--> <exec_depend>libqt5-core</exec_depend> <exec_depend>libqt5-gui</exec_depend> <exec_depend>message_runtime</exec_depend> </package> ```