【发布时间】:2019-04-11 20:23:20
【问题描述】:
问题:我有一个使用 OpenCV 的项目。如果需要,我可以切换到最新版本。我的项目使用 CMake。我目前像这样集成opencv:
# OPENCV package
find_package(OpenCV)
add_library(opencv INTERFACE)
target_include_directories(opencv
INTERFACE
${OpenCV_INCLUDE_DIRS})
target_link_libraries(opencv
INTERFACE
${OpenCV_LIBS})
add_executable(opencv_example example.cpp)
target_link_libraries(opencv_example
PRIVATE
opencv
)
我找不到使用显式模块依赖目标的 OpenCV 示例。为了不弄乱全局包含不必要的内容或留下裸露的变量。我为 OpenCV 创建了一个接口目标并使用这个接口目标而不是做什么OpenCV CMake example recommends:
# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV REQUIRED)
# Declare the executable target built from your sources
add_executable(opencv_example example.cpp)
# Link your application with OpenCV libraries
target_link_libraries(opencv_example ${OpenCV_LIBS})
我的问题是可以只使用 OpenCV 的模块目标,而不必带上整个厨房水槽吗?
示例(参见模块列表here):
...
add_executable(opencv_example example.cpp)
target_link_libraries(opencv_example
PRIVATE
opencv::core
opencv::video
opencv::imgproc
)
因此,我只获得了我实际使用的模块所需的依赖项。我查看了 OpenCV 存储库,但它充满了自定义 cmake 宏和函数,而且很难看到声明目标的位置,更不用说是否可以从 find_package 访问它。
【问题讨论】:
-
我没有测试,但是你有没有尝试在
find_package命令中指定组件,比如stated here:find_package(OpenCV REQUIRED core OPTIONAL_COMPONENTS viz)? -
@StanleyF。呵呵,我没有,我得试试,这至少可以解决我的“所有东西和厨房水槽”问题。