我一直在使用库 mrpt 来包装 ROS 周围的 difodo 算法。我的系统规格是:Ubuntu 18.04 并且我使用 mrpt 平台的 ppa 安装了 mrpt,目前我获得了 mrpt 的 1.9.9 版本。
我一直在我的 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 依赖项(库和包含路径),因此在 projectB.CMakefile 中我会这样做:
find_package(myprojectA REQUIRED)
MRPT 会自动加载。这样依赖树就是mrpt->projectA->ProjectB。
我想避免在 projectB cmake 中再次 find_package() MRPT。
我试过什么? 我一直在使用 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 变量添加到 catking 包中,但 MRPT 似乎没有 MRPT_INCLUDE_DIRS,所以我无法知道包含目录在哪里。
我怎样才能做到这一点?MRPT 在哪里添加 INCLUDE_DIRS 使 CMAKE 在 projectA 中看到标题?除了 catkin_package 是否有更好的方法将依赖项传递给 libA 的消费者?
问候。