cmake - 如何为生成的消息依赖项设置 CMakeLists 和 package.xml?
问题描述
我们有多个节点message_generation
用于生成.h
消息文件以供其他节点使用。将生成的消息包含在非生成包CMakeLists
中的正确方法是什么?package.xml
目前,我正在执行以下操作,但我总是第一次构建失败,然后必须重建,第二次它可以工作。就像它没有意识到它必须首先生成消息一样。package_containing_generated_messages
可能是包装中设置了错误的东西吗?
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?
)
包.xml:
<build_depend>package_containing_generated_messages</build_depend>
<exec_depend>package_containing_generated_messages</exec_depend>
解决方案
几乎是正确的,但是您缺少一个关键的依赖项。这是一个基于您的代码段的示例,该代码段使用您自己的消息构建节点 foo(但不要忘记 package.xml 中的依赖项也很重要,但无论如何您都必须正确。):
cmake_minimum_required(VERSION 2.8.3)
project(foo_package)
find_package(catkin REQUIRED
roscpp
package_containing_generated_messages
)
catkin_package(CATKIN_DEPENDS
roscpp
package_containing_generated_messages
)
include_directories(include
${catkin_INCLUDE_DIRS}
)
## Declare a cpp executable
add_executable(foo foo.cpp)
## Add cmake target dependencies of the executable/library
## as an example, message headers may need to be generated before nodes
add_dependencies(foo package_containing_generated_messages_generate_messages_cpp)
## Specify libraries to link a library or executable target against
target_link_libraries(foo
${catkin_LIBRARIES}
)
重要的一行是在尝试构建之前add_dependencies(foo package_containing_generated_messages_generate_messages_cpp)
确保标志存在的这一行。因此,它确保在构建二进制文件之前生成消息头。请注意,ROS 会为您的包名称添加一个后缀,例如. 这里有一些参考。package_containing_generated_messages_generate_messages_cpp
foo
<my_msgs_package_name>_generate_messages_cpp
推荐阅读
- javascript - 如何在延迟(2 秒)后清除 CustomValidity 消息
- html - DIV 元素的显示出人意料地超出了预期的位置
- javascript - Angular 在不同的组件中显示搜索结果
- ios - 领域文件作为 UIDocument
- python - YDL 在我的简单不和谐机器人中不起作用
- java - Spring Cloud 如何排除 BootstrapConfiguration
- php - 类数据库关闭连接
- javascript - 正则表达式边界 JS
- ruby - 在 Ruby 中,当初始化一个只包含 nil 的新类时,为什么我将一个字符串铲入其中后仍然返回 nil?
- r - 找出差异最大的 2 个变量并将它们组合成一个变量