【问题标题】:Using OpenCV's CMake module targets instead of including all libraries directly?使用 OpenCV 的 CMake 模块目标而不是直接包含所有库?
【发布时间】: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。呵呵,我没有,我得试试,这至少可以解决我的“所有东西和厨房水槽”问题。

标签: c++ opencv cmake target


【解决方案1】:

虽然opencv::module 不起作用,但如果您使用 find_package,则最多从 OpenCV3.2 开始(之前可能已经可用),您可以使用像 opencv_module 这样的目标,例如:

find_package(OpenCV REQUIRED COMPONENTS core imgproc video)

add_executable(opencv_example example.cpp)

target_link_libraries(opencv_example 
    PRIVATE
        opencv_core 
        opencv_video
        opencv_imgproc
)

我发现这些目标被导出到这里:https://github.com/opencv/opencv/issues/8028#issuecomment-273419374

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 2014-05-01
    相关资源
    最近更新 更多