catkin软件包的构成:
1、packet.xml
该文件定义包的属性,如包名、版本号、作者、维护人员和其他catkin包的依赖关系。
它的根标签是(这里的2意为最新的格式版本):
<package format='2'>
</package>
其他标签有:
<name> - 包名
<version> -包的版本(需要是三个点分隔的整数)
<description> - 包内容描述
<maintainer> - 维护这个包的人(们)
<license> - 软件许可证(s)(例如,GPL,BSD,ASL)。
来个例子:名为foo core的虚构包
<package format="2">
<name>foo_core</name>
<version>1.2.4</version>
<description>
This package provides foo capability.
</description>
<maintainer email="ivana@osrf.org">Ivana Bildbotz</maintainer>
<license>BSD</license>
</package>
然而上述标签并不会指定对其他包的任何依赖性,包可以有六种类型的依赖项:
先来一波知识普及,以C语言为例:
用C语言从编写源码,到运行一个程序的过程,可以概括为: 编写源代码(edit)-> 编译(compile)-> 连接,也叫生成(build)-> 运行(execute)。 build:在汇编里称link,在C里叫build,它的作用是生成可执行的exe文件。由于一个程序的源码可由多个文件组成。这些文件在第二步中分别编译,生成各自的目标 文件(*.obj),这一步的作用便是将这些obj文件,以及程序中需要的其它库文件(dll除开),统一到一个文件中来,形成单个的exe文件。此exe文件便可以在操作系 统下直接运行了。 excute:运行,不同的情况下意义也不同。Build Dependencies指定生成这个包需要哪些软件包。这些软件包中的任何文件都在bulid过程中被需要。它可以包含在编译时需要的来自这些包的头文件、来自这些包的链接库,或者在构建时需要任何其他资源(特别是当这些包在CMake中找到包()时)。在交叉编译场景中,构建依赖关系是针对目标架构的。
Build Export Dependencies指定需要哪些软件包来构建针对这个包的库。
Execution Dependencies规定了在这个包中运行代码需要哪些包。
Build Tool Dependencies指定构建系统工具,这个工具包需要构建它自己。通常,唯一需要的构建工具是catkin。在交叉编译场景中,构建工具依赖于编译所执行的体系结构。
Test Dependencies只指定单元测试的附加依赖项。它们不应该复制已经提到的构建或运行依赖项)
umentation Tool Dependencies指定文档工具,这个包需要生成文档。
六种依赖分别使用下述标签:
<depend> 指定这个依赖是build, export, and execution都需要的依赖,是最常用的。
<buildtool_depend>
<build_depend>
<build_export_depend>
<exec_depend>
<test_depend>
<doc_depend>
所有的包最起码有一个依赖,下面是一个例子:
<package format="2">
<name>foo_core</name>
<version>1.2.4</version>
<description>
This package provides foo capability.
</description>
<maintainer email="ivana@osrf.org">Ivana Bildbotz</maintainer>
<license>BSD</license>
<buildtool_depend>catkin</buildtool_depend>
</package>
一个更现实的例子,它指定了构建、执行、测试和doc依赖关系。
<package format="2">
<name>foo_core</name>
<version>1.2.4</version>
<description>
This package provides foo capability.
</description>
<maintainer email="ivana@willowgarage.com">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>
(先到这里,未完)