迁移 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
Section titled “从格式 1 迁移到格式 2”格式 1 和格式 2 在指定依赖项的方式上有所不同。 请阅读 REP-0140 的兼容性部分 以了解差异的概要。
向 <package> 添加 format 属性
Section titled “向 <package> 添加 format 属性”添加或将 format 属性设置为 2,以指示 package.xml 使用格式 2。
<package format="2">替换 <run_depend>
Section titled “替换 <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>
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>
Section titled “开始使用 <doc_depend>”使用新的 <doc_depend> 标签来声明构建软件包文档所需的依赖项。
例如,C++ 软件包可能有此依赖项:
<doc_depend>doxygen</doc_depend>而 Python 软件包可能有这个:
<doc_depend>python3-sphinx</doc_depend>有关更多信息,请参阅 ROS 2 软件包文档指南。
使用 <depend> 简化依赖项
Section titled “使用 <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
Section titled “测试你的新 package.xml”像平时一样使用 catkin_make、catkin_make_isolated 或 catkin 构建工具来构建和测试你的软件包。
如果一切成功,则你的 package.xml 是有效的。