catkin / ROS: как правильно указать путь включения при использовании подмодулей - PullRequest
0 голосов
/ 24 апреля 2018

Я строю проект с использованием 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>

У вас есть идеи, как это решить? Я уверен, что есть больше людей, чем я, пытающихся ссылаться на файлы заголовков из подмодуля в пакете.

...