Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为生成的消息依赖项设置CMakeLists和package.xml?_Cmake_Ros - Fatal编程技术网

如何为生成的消息依赖项设置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)。谢谢!!