将 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”有效。