Я строю проект с использованием ROS и, следовательно, catkin_make для сборки моих узлов и библиотек ROS.
Проблема, с которой я сталкиваюсь:
Я использую подмодуль git в одном пакете (пакет A) (и, следовательно, у меня есть иерархическая структура включаемых папок), и у меня возникают трудности с обращением к файлу заголовка в этом подмодуле.
Чтобы построить пакет B, который зависит от пакета A, я добавил оператор INCLUDE_DIRS в команду catkin_package в пакете A:
catkin_package(
INCLUDE_DIRS my-submodule/include
...
)
Содержимое этого каталога:
my-submodule/my-header.h
(Я поместил заголовочные файлы в папку, названную в честь субмодуля, так как во многих руководствах говорилось, что в ROS вы должны использовать это соглашение).
Оператор включения в файле из пакета B читается так:
...
#include <my-submodule/my-header.h>
...
Это работает нормально - пакет B собирается (так как я использую одно объединенное рабочее пространство для его сборки).
Но: когда я переключаюсь на целевую систему, где я устанавливаю только пакет A, а затем пытаюсь собрать пакет B (в этой целевой системе), он не собирается, поскольку пути включения не являются настроить правильно.
Инструкция INSTALL для пакета A выглядит следующим образом
install(DIRECTORY my-submodule/include
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
FILES_MATCHING PATTERN "*.h"
PATTERN ".svn" EXCLUDE
)
Это происходит главным образом потому, что структура установленных папок в целевой системе выглядит следующим образом:
.../ros/include/my-package-A/include/my-submodule/my-header.h
Таким образом, процесс установки фактически помещает include-путь этого подмодуля в путь package-A-include (который представляет собой другую структуру пути по сравнению с тем, когда я собираю пакеты непосредственно в одном объединенном рабочем пространстве).
А CFLAGS для компиляции только устанавливает каталог include в папку:
.../ros/include
И, таким образом, разрыв моего оператора include в моем файле package-B:
#include <my-submodule/my-header.h>
У вас есть идеи, как это решить?
Я уверен, что есть больше людей, чем я, пытающихся ссылаться на файлы заголовков из подмодуля в пакете.