如何为生成的消息依赖项设置CMakeLists和package.xml?
我们有多个节点使用如何为生成的消息依赖项设置CMakeLists和package.xml?,cmake,ros,Cmake,Ros,我们有多个节点使用message\u generation生成.h消息文件供其他节点使用。在非生成包的CMakeLists和package.xml中包含生成的消息的正确方式是什么 目前,我正在做以下工作,但我总是第一次构建失败,然后必须重新构建,第二次才能正常工作。好像它没有意识到必须先生成消息。是否在包含生成的消息的包中设置了错误 CMakeLists.txt: find_package(catkin REQUIRED roscpp package_containing_g
message\u generation
生成.h
消息文件供其他节点使用。在非生成包的CMakeLists
和package.xml
中包含生成的消息的正确方式是什么
目前,我正在做以下工作,但我总是第一次构建失败,然后必须重新构建,第二次才能正常工作。好像它没有意识到必须先生成消息。是否在包含生成的消息的包中设置了错误
CMakeLists.txt:
find_package(catkin REQUIRED
roscpp
package_containing_generated_messages
)
catkin_package(CATKIN_DEPENDS
roscpp
package_containing_generated_messages #I don't think this one is needed, is it?
)
<build_depend>package_containing_generated_messages</build_depend>
<exec_depend>package_containing_generated_messages</exec_depend>
package.xml:
find_package(catkin REQUIRED
roscpp
package_containing_generated_messages
)
catkin_package(CATKIN_DEPENDS
roscpp
package_containing_generated_messages #I don't think this one is needed, is it?
)
<build_depend>package_containing_generated_messages</build_depend>
<exec_depend>package_containing_generated_messages</exec_depend>
包含生成消息的包
包含\u生成的\u消息的包\u
几乎正确,但您缺少一个关键的依赖项。
下面是一个基于您的代码段的示例,该代码段使用您自己的消息构建节点foo(但不要忘记package.xml中的依赖项也很重要,但您仍然可以正确使用它们):
其中重要的一行是add\u dependencies(foo package\u containing\u generated\u messages\u cpp)
,它确保在尝试构建foo
之前存在package\u containing\u generated\u messages\u cpp
标志。因此,它确保在构建二进制文件之前生成消息头。请注意,ROS会在程序包名称中添加后缀,如\u generate\u messages\u cpp
您应该分离使用彼此消息的耦合包,因此您应该创建一个包含所有消息的包,并将其CMakalist.txt作为msg生成完成,然后在其他包中使用它。您的ROS版本是什么?我不知道为什么有人对答案投了反对票,但添加了add\u依赖项(foo package_包含生成的消息\u生成的消息\u cpp)
应该是您的解决方案。@Tik0,我将在周一试一试。谢谢!是的,答案是添加添加依赖项(foo package_包含生成的消息\u生成的消息\u cpp)。谢谢!!