cmake编译opencv程序

来源:http://blog.csdn.net/tobacco5648/article/details/8643934

用cmake来编译OpenCV程序还是很方便的。

    在D:/test目录下有一个含有opencv api的源文件facedetect.cpp,现要将其编译为DisplayImage.exe程序,首先创建一个文件CMakeLists.txt文件,内容如下:

cmake_minimum_required(VERSION 2.8)                                       //版本
project( DisplayImage )                                                                          //工程
set(OpenCV_DIR E:/opencv)                                                                 //设置OpenCV所在目录,问后面的find_package提供位置
find_package( OpenCV REQUIRED )                                                  //会在OpenCV所在目录查找配置文件OpenCVConfig.cmake
add_executable( DisplayImage facedetect.cpp )                               //向工程添加源文件
target_link_libraries( DisplayImage ${OpenCV_LIBS} )                   //添加链接库

 

    接着,在工程目录下运行cmake -G "MinGW Makefiles" . 

    此命令在当前目录下生成makefile文件

    最后,直接运行make,生成可执行文件


 

来源:http://blog.csdn.net/zhuqibing/article/details/17184939

二、用CMake自动配置OpenCV

没用CMake的时候,要想在VS中使用OpenCV,配置起来相当麻烦,比如包含路径、链接路径、链接库都要配置。有了CMake,只需要2个命令:

find_package(OpenCV REQUIRED)

target_link_libraries(*** ${OpenCV_LIBS} )

就可以轻松搞定。

注:

1、OpenCV和OpenCV_LIBS这2个名字中,每个字母的大小写不能乱用,因为CMake设置了这样的固定大小写;

2、REQUIRED参数,其含义是指这个共享库是否是工程必须的,如果使用了这个参数,说明这个链接库是必备库,如果找不到这个链接库,则工程不能编译;

3、***是你项目要生成的exe或者动态库名字。

 

在你的CMakeLists.txt中添加上面2个命令,用CMake进行configure,提示错误:

 

CMake Error at CMakeLists.txt:6 (find_package):

By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has

asked CMake to find a package configuration file provided by "OpenCV", but

CMake did not find one.

 

解决方法:添加电脑的环境变量——>系统变量——>新建,变量名:OpenCV_DIR,变量值:D:\soft\opencv\build,重启电脑,再用CMake进行configure和generate,然后打开解决方案***.sln,进入VS,编译,运行。

 

点评:为什么要添加环境变量呢?

CMake可以自动找到安装在你电脑里的OpenCV头文件和库(动态库和静态库),但是你要告诉它你的OpenCV安装在哪,要不然搜索你的整个硬盘?很显然,CMake不会这样做。

注意:有一种情况下,需要使用OpenCV的项目不需要target_link_libraries(*** ${OpenCV_LIBS} ):

你的解决方案中包含多个项目,其中一个项目A用来生成动态库,该项目的CMakeLists.txt中包含target_link_libraries(*** ${OpenCV_LIBS} );该解决方案中的项目B依赖项目A,那么项目B的CMakeLists.txt中就不需要包含target_link_libraries(*** ${OpenCV_LIBS} )。

 


 

posted @ 2017-04-14 10:57  xiaoming123abc  阅读(6047)  评论(1编辑  收藏  举报