Skip to content

迁移 package.xml 到格式 2

ROS 2 要求 package.xml 文件至少使用 格式 2。 本指南展示了如何将 package.xml 从格式 1 迁移到格式 2。

如果你的 package.xml 开头的 <package> 标签是以下两种形式之一,则它使用的是格式 1,你必须进行迁移。

<package>
<package format="1">

你应该有一个正常工作的 ROS 1 安装。 这使你能够通过构建和测试软件包来检查转换后的 package.xml 是否有效,因为 ROS 1 支持所有 package.xml 格式版本。

格式 1 和格式 2 在指定依赖项的方式上有所不同。 请阅读 REP-0140 的兼容性部分 以了解差异的概要。

添加或将 format 属性设置为 2,以指示 package.xml 使用格式 2。

<package format="2">

<run_depend> 标签不再被允许。 如果你有这样的依赖项声明:

<run_depend>foo</run_depend>

则用一个或两个以下标签替换它:

<build_export_depend>foo</build_export_depend>
<exec_depend>foo</exec_depend>

如果在执行软件包中的某些内容时需要该依赖项,则使用 <exec_depend> 标签。 如果依赖你的软件包的其他软件包在构建时需要该依赖项,则使用 <build_export_depend> 标签。 如果不确定,则同时使用两个标签。

将某些 <build_depend> 转换为 <test_depend>

Section titled “将某些 <build_depend> 转换为 <test_depend>”

在格式 1 中,<test_depend> 声明运行软件包测试时所需的依赖项。 在格式 2 中它仍然这样做,但它还声明了构建软件包测试时所需的依赖项。

由于格式 1 中此标签的限制,你的软件包可能将仅用于测试的依赖项声明为 <build_depend>,如下所示:

<build_depend>testfoo</build_depend>

如果是这样,请将其更改为 <test_depend>。

<test_depend>testfoo</test_depend>

注意: 如果你使用 CMake,请确保你的测试依赖项仅在 if(BUILD_TESTING) 块内引用:

if (BUILD_TESTING)
find_package(testfoo REQUIRED)
endif()

使用新的 <doc_depend> 标签来声明构建软件包文档所需的依赖项。 例如,C++ 软件包可能有此依赖项:

<doc_depend>doxygen</doc_depend>

而 Python 软件包可能有这个:

<doc_depend>python3-sphinx</doc_depend>

有关更多信息,请参阅 ROS 2 软件包文档指南。

<depend> 是一个新标签,可以使 package.xml 文件更简洁。 如果你的 package.xml 对同一个依赖项有以下三个标签:

<build_depend>foo</build_depend>
<build_export_depend>foo</build_export_depend>
<exec_depend>foo</exec_depend>

则用单个 <depend> 替换它们,如下所示:

<depend>foo</depend>

像平时一样使用 catkin_make、catkin_make_isolated 或 catkin 构建工具来构建和测试你的软件包。 如果一切成功,则你的 package.xml 是有效的。