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} )。