Вопрос: Каков наилучший способ включения сгенерированных сообщений / служб 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 , пожаловался, что find_package(myPackage)
выдает ошибку в его инструментах IDE CMake. Я знаю, что это вызвано тем, что source catkin_ws/devel/setup.bash
не запускается в IDE.
Мои знания CMake - это в лучшем случае пэчворк, но я знаю, что люди в проекте предпочитают Modern CMake и Я не уверен, что лучшая практика для решения этой проблемы. (Должен ли я запускать скрипт setup.bash
внутри верхнего CMakeLists.txt? Должен ли я вручную добавить местоположение сгенерированного заголовка / lib, используя set()
?)