catkin/package.xml说明

总览

ROS的package包使用package.xml文件来描述,该描述文件必须放置在将使用catkin的package的根目录下。package.xml文件用于定义package包的一些属性,包括名称、package版本号、作者、维护者、以及对其他package包的依赖。旧式的rosbuild使用manifest.xml文件。
在package.xml文件中,声明了对系统package的依赖,如果声明缺失或错误,可能并不影响本机编译和运行,但是当你发布到ROS社区,分享给他人使用的时候,其他使用者可能难以根据你的package.xml信息进行编译。

标准格式2(推荐格式)

Format 2是目前ROS的推荐使用格式,接下来对该格式的一些结构进行介绍:

基本结构

每一个package.xml文件都有根标签

<package format="2">

</package>

必要标签

以下标签是每个package.xml文件必须填写的标签:

  • 包的名称
  • 包的版本号,使用三个整数并用点分隔
  • 包内容的描述
  • 包的维护者
  • 发行代码使用的许可
    下面是一个package.xml基本的例子:
<package format="2">
  <name>foo_core</name>
  <version>1.2.4</version>
  <description>
  This package provides foo capability.
  </description>
  <maintainer email="[email protected]">Ivana Bildbotz</maintainer>
  <license>BSD</license>
</package>

依赖

只含有以上必要基础标签的package.xml文件并没有指明对其他包的依赖,package包的依赖主要分为以下六类:

  • Build Dependencies 用于指定build该package需要使用到的依赖包。这样,在build的时候,该package会将其他依赖项的头文件包含进来,链接这些依赖项的库,或者是将用到其他资源(特别是在CMakelist中,这些依赖项被写进了find_package()函数中)。在交叉编译的场景下,build依赖是针对构建目标项(如可执行文件)结构而言的。
  • Build Export Dependencies 用于指定构建该package的库时需要的依赖包。主要是用于在该package下传递地包含其他依赖的头文件(特别在Cmakelist中,这些依赖在函数catkin_pakage()中,被声明为(CATKIN_)DEPENDS)。
  • Execution Dependencies 用于指定运行package代码时需要的依赖包。主要是当该package使用共享的库的时候(特别是在cmakelist中,这些依赖在catkin_pack()中,被声明为(CATKIN_)DEPENDS).
  • Test Dependencies 用于指定对该单元进行测试时需要用到的额外依赖。注意,这里不能使用前面几种依赖中已经声明的依赖。
  • Build Tool Dependencies 用于指定本package用于build自身时所用的build工具。典型唯一需要用到的工具就是catkin,在交叉编译场景中,build工具主要考虑到编译结构将在哪里进行编译。
  • Documentation Tool Dependencies 用于指定该package需要生成文本所需要的工具。

依赖在package.xml文件中主要用到以下对应标签:

  • 指定在build,export,execution用到的依赖,该标签使用地最多。
  • <build_depend>
  • <build_export_depend>
  • <exec_depend>
  • <test_depend>
  • <buildtool_depend>
  • <doc_depend>

所有的package都至少有一个依赖项,就是使用catkin作为buildtool的例子。

<package format="2">
  <name>foo_core</name>
  <version>1.2.4</version>
  <description>
    This package provides foo capability.
  </description>
  <maintainer email="[email protected]">Ivana Bildbotz</maintainer>
  <license>BSD</license>
  <buildtool_depend>catkin</buildtool_depend>
</package>

下面是更加实际的例子:


<package format="2">
  <name>foo_core</name>
  <version>1.2.4</version>
  <description>
    This package provides foo capability.
  </description>
  <maintainer email="[email protected]">Ivana Bildbotz</maintainer>
  <license>BSD</license>
  <url>http://ros.org/wiki/foo_core</url>
  <author>Ivana Bildbotz</author>
  <buildtool_depend>catkin</buildtool_depend>
  <depend>roscpp</depend>
  <depend>std_msgs</depend>
  <build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend>
  <exec_depend>rospy</exec_depend>
  <test_depend>python-mock</test_depend>
  <doc_depend>doxygen</doc_depend>
</package>

元包

通过元包(Metapackages)可以将多个package集合到一个package中,元包也是一种package,只是在其package.xml文件中有以下export标签:

 <export>
   <metapackage />
 </export>

除了需要在<buildtool_depends>中声明对catkin的依赖以外,元包只能含有对其组成的package声明的执行(execution)依赖。
除此之外,在cmakelist中也要求必须如下书写:

cmake_minimum_required(VERSION 2.8.3)
project(<PACKAGE_NAME>)
find_package(catkin REQUIRED)
catkin_metapackage()

注意 使用元包名称代替<PACKAGE_NAME>

其他标签

  • 该package的url信息,通常是wiki页面或ros.org
  • 该package的作者

标准格式1(遗留格式)

老一些的package主要使用标准格式1,主要是在依赖标签中发生了一些改变。

发布了2 篇原创文章 · 获赞 4 · 访问量 3385

猜你喜欢

转载自blog.csdn.net/qq_35503971/article/details/102717030
今日推荐