用CMAKE配置自己的OpenCV程序
---配置OpenCV从来没有这么简单!
本文需要一定的CMAKE知识,推荐阅读中文的 CMake Practice.pdf ,至于Cmake是什么,我只能说他是跨平台的项目管理工具,具体请各位客官百度之.这里假设你已经看了pdf,有不懂得也请自翻书.
昨天在网上得知,用Cmake写自己的opencv程序只需要使用一个CMakeLists.txt,配合万能的cmake命令就能生成万能的makefile文件,自动配置头文件包含,库包含,自动连接lib文件.
详情见官方文档 Using OpenCV with gcc and CMake,不过官方文件是用gcc进行的,而我用的是VS2013,于是经过一上午的奋斗,解决了配置Windows平台的方法.概述如下:
配置opencv只需一个CMakeLists.txt
cmake_minimum_required(VERSION 2.8) project( DisplayImage ) find_package( OpenCV REQUIRED ) add_executable( DisplayImage DisplayImage.cpp ) target_link_libraries( DisplayImage ${OpenCV_LIBS} )
其中:
cmake_minimum_required(VERSION 2.8) 指定了最小的CMAKE版本,也就是说必须用 2.8以上版本
project( DisplayImage ) 定义了一个工程(VS中的解决方案),叫 DisplayImage
find_package( OpenCV REQUIRED ) 关键的一句,找到opencv的配置,并自动配置
add_executable( DisplayImage DisplayImage.cpp ) 添加一个可执行文件,即VC中的项目,名字叫DisplayImage,使用的源文件是 DisplayImage.cpp
target_link_libraries( DisplayImage ${OpenCV_LIBS} ) 关键的第二句, 指定链接库,其中 OpenCV_LIBS 是关键的一句中生成的
个人猜测:在linux和Mac等平台上需要用 make install 安装opencv,在opencv源文件目录下依次执行:
mkdir build cd build cmake ../ make make install
径过实验,证实:
在Windows平台上需要添加环境变量CMAKE_PREFIX_PATH其内容为:
你的OpenCV目录/build
目的是让cmake找到
OpenCVConfig.cmake
OpenCVConfig-version.cmake
两个文件,然后cmake会依照其确定正确的生成平台和方式,这样VS就可以像gcc等一样能用cmake构建工程文件啦!
*不添加CMAKE_PREFIX_PATH变量有时也能工作,只是有时不能,具体不清楚为什么
*当然,你要将cmake的bin目录包含到path这样你才能直接使用 cmake 命令
opencv的配置文件(OpenCVConfig.cmake)生成了一系列CMAKE量:
# - OpenCV_LIBS : The list of libraries to links against.
# - OpenCV_LIB_DIR : The directory(es) where lib files are. Calling LINK_DIRECTORIES
# with this path is NOT needed.
# - OpenCV_INCLUDE_DIRS : The OpenCV include directories.
# - OpenCV_COMPUTE_CAPABILITIES : The version of compute capability
# - OpenCV_ANDROID_NATIVE_API_LEVEL : Minimum required level of Android API
# - OpenCV_VERSION : The version of this OpenCV build. Example: "2.4.0"
# - OpenCV_VERSION_MAJOR : Major version part of OpenCV_VERSION. Example: "2"
# - OpenCV_VERSION_MINOR : Minor version part of OpenCV_VERSION. Example: "4"
# - OpenCV_VERSION_PATCH : Patch version part of OpenCV_VERSION. Example: "0"
#
# Advanced variables:
# - OpenCV_SHARED
# - OpenCV_CONFIG_PATH
# - OpenCV_LIB_COMPONENTS
#
# ===================================================================================
#
# Windows pack specific options:
# - OpenCV_STATIC
# - OpenCV_CUDA