來源: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} )。