将 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

格式 1 和格式 2 在指定依赖项的方式上有所不同。 阅读 REP-0140 <https://www.ros.org/reps/rep-0140.html#compatibility>`__ 中的 `兼容性部分,了解差异摘要。

format 属性添加到 <package>

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

<package format="2">

替换 <run_depend>

<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>

在格式 1 中,<test_depend> 声明运行包的测试时所需的依赖项。

它在格式 2 中仍然这样做,但它还声明了构建包的测试时所需的依赖项。

由于格式 1 中此标签的限制,您的包可能具有仅测试依赖项,指定为 <build_depend>,如下所示:

<build_depend>testfoo</build_depend>

如果是的话,将其改为“<test_depend>”。

<test_depend>testfoo</test_depend>

Note

如果您使用 CMake,请确保您的测试依赖项仅在“if(BUILD_TESTING)”块中引用:

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

开始使用 <doc_depend>

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

<doc_depend>doxygen</doc_depend>

而 Python 包中可能有这个:

<doc_depend>python3-sphinx</doc_depend>

有关详细信息,请参阅 ROS 2 软件包文档指南

使用 <depend> 简化依赖项

<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>

测试新的“package.xml”

使用“catkin_make”、“cakin_make_isolated”或“catkin”构建工具,像平常一样构建和测试您的包。 如果一切成功,则您的“package.xml”有效。