我的计算机上安装了一个系统库,例如OpenCV 3.0.0(例如),/opt/OpenCV3
。
我想在我自己的包opencv3
中包装OpenCV的依赖项。这样我可以像这样使用catkin:
find_package(catkin REQUIRED COMPONENTS
opencv3
)
所以我继续创建了opencv3包。我能够找到系统库的外部.cmake文件和构建。以下是opencv3
CMakeLists.txt
的重要部分:
cmake_minimum_required(VERSION 2.8.3)
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "/opt/OpenCV3")
...
find_package(catkin REQUIRED)
find_package(OpenCV 3.0.0 EXACT)
...
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES opencv3
# CATKIN_DEPENDS
DEPENDS OpenCV
)
现在,当我将自定义包opencv3
包含在其他包作为依赖项时,其他包找不到OpenCV库,因此无法链接/构建!但是,OpenCV包含的目录确实转移到其他包。因此,当我在CMakeLists.txt
其他使用opencv3
的软件包中使用此代码时,
message(STATUS ${opencv3_INCLUDE_DIRS})
我得到了输出:
/opt/OpenCV3/include
哪个是对的。我只是无法找出DEPENDS
(...)的catkin_package
字段如何使系统依赖库转移到新包。 catkin_LIBRARIES
和opencv3_LIBRARIES
中没有OpenCV库......
答案 0 :(得分:0)
我最终按照此处的说明操作:http://docs.ros.org/hydro/api/catkin/html/howto/system_library_dependencies.html
即使我使用find_package
()查找OpenCV,导出的OpenCV_LIBRARIES
变量也不包含库文件的完整路径,只包括名称。这导致库不会显示在包含我的opencv3
包的其他包中。
解决方案是创建一个包含OpenCV库的完整路径的变量,并将该变量放在LIBRARIES
()的catkin_package
部分中。只有这样,依赖于opencv3
的包能够正确链接和构建。
我对此解决方案感到非常满意,但它仍然需要我创建一个自定义变量,其中包含所有OpenCV库的绝对路径。我宁愿在DEPENDS OpenCV
()中使用catkin_package
并完成它。