【发布时间】:2020-04-15 04:40:25
【问题描述】:
问题:将生成的 ros 消息/服务包含在 catkin 工作场所之外的代码中的 CMakeLists.txt 中的最佳做法是什么?
上下文: 因此,在我开始从事的当前项目中,构建系统基于 CMake,但 一些 代码/可执行文件使用 ROS。我决定遵循相同的模式,并在 ROS catkin 工作场所之外创建大多数可执行文件。现在由于一些新的需求,我需要创建自己的 ROS 消息/服务,并将它们作为包添加到 catkin 工作场所,并使用 catkin_make 生成它们。目录树如下
root
|-CMakeLists.txt
|-src
|-|--myExecutable.cpp
|-catkin_ws
|--|--src
|--|--|--myPackage
|--|--|---|--srv
|--|--|---|--msg
|--|--|---|--package.xml
|--|--|---|--CMakeLists.txt
|-otherLibraries
|--|--CMakeLists.txt
现在,为了我自己的使用,我只运行一次 catkin_make 来生成 msg/srv 和 source catkin_ws/devel/setup.bash 的头文件(实际上添加到我的 ~/.bashrc 中)用于构建项目,顶部是 CMakeLists.txt。在顶部的 CMakeLists.txt 中,我有 find_package(myPackage),这适用于我的使用,myExecutable.cpp 使用 myPackage 中定义的消息/服务以及 otherLibraries 中其他人创建的库编译并运行得很好。
现在该项目的另一位成员使用 Visual Studio Code 抱怨 find_package(myPackage) 在他的 IDE CMake 工具上出错。我知道这是因为 source catkin_ws/devel/setup.bash 没有在 IDE 上运行。
我的 CMake 知识充其量只是拼凑而成,但我知道项目中的人更喜欢 Modern CMake,我不确定解决此问题的最佳做法是什么。 (我应该在顶部 CMakeLists.txt 中运行setup.bash 脚本吗?我应该使用set() 手动添加生成的头文件/库的位置吗?)
【问题讨论】:
标签: visual-studio-code cmake ros build-system