出去嗨将近一个月,回来好多事情堆到一起等着处理,可是先前的做的东西怎么做的基本忘了而且又没做记录,重新捡起是一个比较痛苦和耗时的事,以此为训,养成个好习惯,记录开发的点滴点滴,不积跬步,无以成千里,不积小流,无以成江河,千里之行,始于足下,给自己五年时间,现在已经过去一年半了,屌丝青年,继续加速努力吧!今晚从捡起CMake开始!
CMake是什么?
引用百度的话就是CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,简单的说它就是一个可以用根据不同平台生成对应的编译脚本的工具。CMake怎么用?
CMake工具使用一个名为CMakeLists.txt 的文件来描述构建过程,可以产生标准的构建文件,如 Unix 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。文件 CMakeLists.txt 需要手工编写,也可以通过编写脚本进行半自动的生成。CMake 提供了比 autoconfig 更简洁的语法。在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:
1)编写 CmakeLists.txt。
2)执行命令“cmake PATH”或者“ccmake PATH”生成 Makefile ( PATH 是 CMakeLists.txt 所在的目录 )。
3)使用 make 命令进行编译。CMake具体使用实例
写到这,一道闪光,自己沉睡的记忆被唤醒了,欣慰啊,想起自己在安装opencv的时候用过CMake, 具体就以安装opencv为例。
1)从官网下载最新opencv源码
2)tar解压opencv
3)
cd ~/opencv-x.x.x
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make
sudo make install
下面在opencv测试用例中继续使用CMake生成相应的Makefile并验证opencv安装成功。
1) 创建工作目录
mkdir ~/opencv-lena
cd ~/opencv-lena
vim DisplayImage.cpp
2) 拷贝如下代码到cpp中
include <stdio.h>
include <opencv2/opencv.hpp>
using namespace cv;
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;
}
3) 创建CMake编译文件
vim 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} )
4) 编译
cd ~/opencv-lena
cmake .
make
5) 执行
此时opencv-lena文件夹中已经产生了可执行文件DisplayImage,下载lena.jpg放在opencv-lena下,运行./DisplayImage lena.jpg即可看到显示出lena的照片。
CMake使用过程中最核心的东西就是如何编写CMakeLists.txt,下一节再具体分析CMakeLists.txt各种语法及语义。