美文网首页
cmake实践:我还需要用${OpenCV_INCLUDE_DI

cmake实践:我还需要用${OpenCV_INCLUDE_DI

作者: BetterCV | 来源:发表于2020-09-20 09:59 被阅读0次

OpenCV作为优秀的C/C++开源项目,它的CMake写法堪称典范。

目前能下载到的OpenCV的Visual Studio预编译版本中,只有OpenCV 3.0.0需要手动包含${OpenCV_INCLUDE_DIRS}

  • 如果你用2.x版本,可以用2.4.9,也可以用2.4.13.6。相信你不会去用2.3.1这么老的版本的
  • 如果你用3.x版本,建议用>=3.4.2的,因为[3.0.0, 3.4.1]区间内默认的jpeg编解码结果和其他范围的不一致
  • 如果你用4.x版本,需要开启C++11,建议用最新的4.4.0

OK,废话说了很多,贴一个鲁棒性比较强的CMakeLists.txt吧,展示了查找和链接OpenCV时处理各种版本的情况的用法:

cmake_minimum_required(VERSION 3.15)

project(demo)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

set(OpenCV_DIR "D:/lib/opencv/4.3.0" CACHE PATH "Directory that contains OpenCVConfig.cmake")

find_package(OpenCV QUIET COMPONENTS opencv_world)
# for opencv 2.4 on ubuntu 16.04, there is no opencv_world but OpenCV_FOUND will be TRUE
if("${OpenCV_LIBS}" STREQUAL "")
    set(OpenCV_FOUND FALSE)
endif()
if(NOT OpenCV_FOUND)
    find_package(OpenCV QUIET COMPONENTS core highgui imgproc imgcodecs videoio)
endif()
if(NOT OpenCV_FOUND)
    find_package(OpenCV QUIET COMPONENTS core highgui imgproc)
endif()


if(OpenCV_FOUND)
    message(STATUS "OpenCV library: ${OpenCV_INSTALL_PATH}")
    message(STATUS "    version: ${OpenCV_VERSION}")
    message(STATUS "    libraries: ${OpenCV_LIBS}")
    message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
    if(${OpenCV_VERSION_MAJOR} GREATER 3)
        set(CMAKE_CXX_STANDARD 11)
    endif()
else()
    message(FATAL_ERROR "Error! OpenCV not found!")
endif()

add_executable(demo
    src/demo.cpp
)

target_link_libraries(demo ${OpenCV_LIBS})

# opencv 3.0.0 requires manually including header files and MT(static) linking
if(${OpenCV_VERSION_MAJOR} EQUAL 3 AND
    ${OpenCV_VERSION_MINOR} EQUAL 0 AND
    ${OpenCV_VERSION_PATCH} EQUAL 0)

  target_include_directories(demo PUBLIC ${OpenCV_INCLUDE_DIRS})

  if(MSVC AND NOT CMAKE_VERSION VERSION_LESS "3.15")
    set_property(TARGET demo PROPERTY
      MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
    )
  endif()

endif()

更多例子见 https://github.com/zchrissirhcz/cmake_examples

相关文章

  • cmake实践:我还需要用${OpenCV_INCLUDE_DI

    OpenCV作为优秀的C/C++开源项目,它的CMake写法堪称典范。 目前能下载到的OpenCV的Visual ...

  • cmake学习笔记6-catkin的CmakeList.txt讲

    引用cmake学习笔记-cmakelist.txt创建项目示例cmake的介绍和使用 Cmake实践推荐cmake...

  • Mac下 CMake 安装及环境配置

    编译hadoop的native库需要用到cmake,因此需要安装cmake。 在cmake官网[https://c...

  • cmake使用方法详解 - Windows Linux MacO

    一什么是CMake,为什么要使用它 CMake 是用于构建、测试和软件打包的开源跨平台工具, 为什么要用cmake...

  • 混淆工具插件-OLLVM

    需要用到的工具cmake 下载好软件,用命令执行.https://cmake.org/download/[htt...

  • CMake之find_package

    首先强烈推荐对CMake不熟的同学先看这本书《Cmake实践》。 CMake说起来是个好东西,可是真正用的时候并不...

  • Cygwin下编译DynaHack

    一.以下依赖库是必须安装的 二.DynaHack用的是CMake构建系统 三.还不算完,还需用CMake的图形界面...

  • Ubuntu通过资源包安装CMake

    项目要用的cmake库需要3.21以上,apt-get install安装的cmake到不了这么高版本,只能从资源...

  • CMake最佳实践

    前言 相信每个人都写过CMakeLists,然而,“一千个读者心中有一千个哈姆雷特”,一千个程序员也能写出一千种C...

  • CMake最佳实践

    前言 相信每个人都写过CMakeLists,然而,“一千个读者心中有一千个哈姆雷特”,一千个程序员也能写出一千种C...

网友评论

      本文标题:cmake实践:我还需要用${OpenCV_INCLUDE_DI

      本文链接:https://www.haomeiwen.com/subject/keuuyktx.html