cmake - 使用CMAKE编译时找不到ROS
问题描述
我正在使用一个连接到ROS的软件,当我通过Cmake编译包时,我遇到错误“找不到ROS包”
我已将 ROS 目录添加到“CMAKE_PREFIX_PATH”,但失败了。而且我检查了ROS包,我找不到相关文件。
错误:
CMake Error at applications/plugins/SoftRobots/CMakeLists.txt:190
(find_package):
By not providing "FindROS.cmake" in CMAKE_MODULE_PATH this project
has asked CMake to find a package configuration file provided by "ROS",
but CMake did not find one.
Could not find a package configuration file provided by "ROS" with any of
the following names:
ROSConfig.cmake
ros-config.cmake
Add the installation prefix of "ROS" to CMAKE_PREFIX_PATH or set "ROS_DIR"
to a directory containing one of the above files. If "ROS" provides a
separate development package or SDK, be sure it has been installed.
Cmake.list
find_package(ROS QUIET REQUIRED)
message(STATUS "ROS found: ${ROS_FOUND}")
解决方案
TL;博士
ROS 不是一个单独的包,它是一个包的集合。ROS 只是一个与主要 aptitude 包关联的名称ros-${ROS_DISTRO}-desktop-full
,与 CMake 无关。
结束 TL;DR
通常,有人将他们的代码转换为 ROS,以便他们可以访问具有预建消息类型和库的网络通信的内置功能,以访问具有硬件的传感器(尽管您不需要机器人硬件来使用 ROS)。
ROS 只是通信的抽象。如果你想在你的项目中使用 ROS 的库,那么我建议你使用 build-sytem catkin
。catkin
是将所有 ROS 包链接在一起,以便您可以在 CMake 文件中使用它们。
我建议您点击此链接,其中有人显示他们的 CMakeLists.txt 文件。您需要了解的重要部分是:
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
genmsg
message_generation
depend_1
depend_2
)
catkin_package(
INCLUDE_DIRS include
LIBRARIES ${PROJECT_NAME}
CATKIN_DEPENDS
DEPENDS system_lib
)
include_directories(
include
${catkin_INCLUDE_DIRS}
)
然后到最后,在你定义了你的可执行文件之后,
target_link_libraries(run_${PROJECT_NAME}
${PROJECT_NAME}
${catkin_LIBRARIES}
)
我应该注意,我没有测试任何这个 CMake 进行验证。这里的重点是说明如何从 ROS 生态系统中获取您想要的包。一旦你有正确的 CMake,你可以简单地#include
正确的头文件。发生的事情是 CMake 正在“调用”catkin
找到所需的软件包(有关更多详细信息,请参阅上面的链接)。听起来,鉴于您正在尝试“导入 ROS”,您对 ROS 的经验不足(没关系,我也是新手),而且这不是一个 ROS 包,而是一个单独的包可以使用 ROS 生态系统中提供的库进行简化的项目。不过我不得不说,由于您离包含 ROS 的正确方法还有很长的路要走,所以我不完全确定还有什么可以帮助的,因为您没有在为什么首先需要 ROS 的问题中提供详细信息。
(如果这回答了您的问题,则绿色复选标记是友好的 :)
推荐阅读
- python - 如何在 CSV 标题和字典键之间循环操作
- java - 带有 JDK 10 的 Kotlin
- c# - 统一处理协程
- python - 跨 PySpark DataFrame 列的字符串匹配
- maven - 仅在 Maven 依赖项中包含必需的模块
- nginx - 如果使用 ngx.shared.dict,我会徘徊,是否有任何情况会使我的数据在插入 mysql 之前被覆盖?
- html - 一个项目中有多个 Servlet?
- android - 无法打开请求的套接字:地址已在使用中:bind-Android Studio
- android - Android AppBarLayout TabLayout
- css - 一个 html 文档中的多个页面