1、CMake
定義:CMake是一個跨平台編譯工具,可以用來自動輸出makefile文件;
用法:(1)想要自動生成makefile,還需要編寫對應的CMakeLists.txt文件;
(2)在CMakeLists.txt的同級目錄下使用"cmake ."命令就能生成對用的makefile文件;
語法解釋,以下面這個腳本為例:
cmake_minimum_required(VERSION 2.8) //cmake最低要求版本2.8以上 project( DisplayImage ) //project不是強制性的,最好加上,這會引入兩個變量:DISPLAYIMAGE_BINARY_DIR和DISPLAYIMAGE_SOURCE_DIR find_package( OpenCV REQUIRED ) //尋找庫文件 add_executable( DisplayImage DisplayImage.cpp ) //生成可執行文件 target_link_libraries( DisplayImage ${OpenCV_LIBS} ) //可執行文件和庫之間建立鏈接
2、makefile
定義:makefile是一個文件,它定義了一系列的規則來指定,哪些文件需要先編譯,哪些后編譯,哪些需要重新編譯,甚至於進行更復雜的功能操作;
cmake和makefile的關系如下:
第一個例子:編譯一個opencv小程序
(1)編寫源文件
#include <stdio.h> #include <opencv2/opencv.hpp> using namespace cv; //DisplayImage.cpp int main(int argc, char** argv ) { if ( argc != 2 ) { printf("usage: DisplayImage.out <Image_Path>\n"); return -1; } Mat image; image = imread( argv[1], 1 ); if ( !image.data ) { printf("No image data \n"); return -1; } namedWindow("Display Image", WINDOW_AUTOSIZE ); imshow("Display Image", image); waitKey(0); return 0; }
(2)編寫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} )
(3)編譯
cmake .
make
(4)執行
./DisplayImage lena.jpg
(5)結果