Pass включает в себя и библиотеки MRPT в качестве библиотеки зависимостей - PullRequest
1 голос
/ 22 марта 2020

Я использовал библиотеку mrpt, чтобы обернуть алгоритм Diffodo вокруг ROS. Мои системные спецификации: Ubuntu 18.04 и Ive установили mrpt с помощью ppa с платформы mrpt, в настоящее время Ive получил версию 1.9.9 mrpt.

Я использовал следующее в моем cmake для использования mrpt в коде, который я создал вот так:

find_package(MRPT REQUIRED poses gui vision)
# I got these variables
MRPT_LIBRARIES=mrpt::poses;mrpt::gui;mrpt::vision

MRPT_CONFIG=/usr/share/mrpt/mrpt-config.cmake
MRPT_CONSIDERED_CONFIGS=/usr/share/mrpt/mrpt-config.cmake
MRPT_CONSIDERED_VERSIONS=1.9.9
MRPT_DIR=/usr/share/mrpt
MRPT_FOUND=1
MRPT_LIBS=mrpt::poses;mrpt::gui;mrpt::vision
MRPT_VERSION=1.9.9
MRPT_VERSION_COUNT=3
MRPT_VERSION_MAJOR=1
MRPT_VERSION_MINOR=9
MRPT_VERSION_PATCH=9
MRPT_VERSION_TWEAK=0

.
.
.
target_link_libraries(MyexeA ${MRPT_LIBRARIES})
target_link_libraries(MyLibA ${MRPT_LIBRARIES})

Это прекрасно работает для MyExeA до сих пор. Теперь я хочу создать MyLibA и использовать эту библиотеку в другом проекте.

Моя цель состоит в том, чтобы автоматически включить все зависимости MRPT (libs и include paths), чтобы в projectB.CMakefile я делал:

find_package(myprojectA REQUIRED)

MRPT загружается автоматически. Таким образом, дерево зависимостей будет mrpt-> projectA-> ProjectB .

Я хочу избежать повторного обнаружения MRPT find_package () в cmake projectB.

Что я пробовал? Я использовал catkin_package () для добавления всех зависимостей и включений, необходимых следующим образом:

catkin_package(
        INCLUDE_DIRS include
        LIBRARIES ${PROJECT_NAME} ${OpenCV_LIBS}
        CATKIN_DEPENDS roscpp cv_bridge image_transport rospy std_msgs
        DEPENDS OpenCV MRPT)

Но когда я делаю это, projectB не может найти включения из MRPT.

Моя следующая попытка состояла в том, чтобы использовать переменные MRPT_LIBRARIES и MRPT_INCLUDE_DIRS для добавления в пакет отслеживания, но в MRPT, похоже, нет MRPT_INCLUDE_DIRS, поэтому у меня нет возможности узнать, где находятся включаемые каталоги.

Как можно Я достиг этого? Где MRPT добавляет INCLUDE_DIRS, заставляя CMAKE в проекте A видеть заголовки? Есть ли лучший способ, кроме catkin_package, передать зависимости потребителям libA?

С уважением.

1 Ответ

0 голосов
/ 25 марта 2020

Вам необходимо указать MRPT как PUBLI C зависимость вашего проекта с:

target_link_libraries(MyexeA PUBLIC ${MRPT_LIBRARIES})

Кроме того, добавьте PUBLI C или PRIVATE для любого другого использования target_link_libraries().

И, как сказал @ Цыварев, вы должны экспортировать цели своего проекта cmake, чтобы все работало без проблем. См. этот учебник , например.

...