文章目录
- 一、CMake是什么?
- 1.1 基本概念
- 1.2 CMake的优势
- 二、使用Cmake构建一个OpenCV程序
- 2.1 步骤
- (a)编写一个简单的OpenCV示例代码
- (b)创建一个Cmake文件
- (c)生成可执行文件
- (d)执行程序
一、CMake是什么?
1.1 基本概念
百度百科-CMake
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
1.2 CMake的优势
1、在Linux和Windows之间移植时,无需更改任何内容
2、可以轻松地与CMake(即Qt,ITK和VTK)的其他工具组合使用
3、自动搜索正在构建的软件可能需要的程序、库和头文件的能力。这包括在搜索时考虑环境变量和 Window 的注册表设置的能力。
4、在源代码树之外构建目录树的能力。这允许开发人员删除整个构建目录,而不必担心删除源文件。
5、能够为自动生成的文件(例如QT的 moc() 或SWIG包装器生成器)创建复杂的自定义命令。这些命令用于在构建过程中生成新的源文件,这些文件又被编译到软件中。
6、在配置时选择可选组件的能力。例如VTK的几个库是可选的,CMake 为用户提供了一种简单的方法来选择构建哪些库。
7、在简单的文本文件自动生成工作区和项目的能力。这对于具有许多程序或测试用例的系统来说非常方便,每个程序或测试用例都需要一个单独的项目文件,通常是使用 IDE 创建一个乏味的手动过程。
8、在静态和共享构建之间轻松切换的能力。CMake 知道如何在所有支持的平台上创建共享库和模块。处理复杂的特定于平台的链接器标志,并且许多 UNIX 系统都支持诸如共享库的内置运行时搜索路径之类的高级功能
9、在大多数平台上自动生成文件依赖项并支持并行构建。
二、使用Cmake构建一个OpenCV程序
2.1 步骤
(a)编写一个简单的OpenCV示例代码
#include <iostream>
#include <opencv2/opencv.hpp> // 包含opencv的库头文件
using namespace std;
using namespace cv; //使用命名空间cv,包含空间中方法及属性
int main(int argc, char** argv )
{
if ( argc != 2 ) // 命令行参数个数不是2个的时候
{
printf("使用指令: DisplayImage <Image_Path>\n"); // 提示:按照固定格式输入指定内容!
return -1;
}
Mat img; //创建一个名称为img的图像容器(这个后边会介绍到)
img = imread( argv[1], 1 ); //为该容器读取命令行中 DisplayImage 之后的参数(图片路径“<Image_Path>”)
if ( !img.data ) //如果读取数据为空(没有读取到图片)
{
cout<<"没有图片数据!"<<endl;
return -1;
}
namedWindow("检索到的图片", WINDOW_AUTOSIZE );//创建图片显示窗口
imshow("Display Image", img);//显示图片
waitKey(0); //延迟等待
return 0;
}
(b)创建一个Cmake文件
cmake_minimum_required(VERSION 2.8) # 选择最匹配的最低的Cmake版本
project( DisplayImage ) # 创建的程序的名称(项目的名称)
find_package( OpenCV REQUIRED ) # 找到需求的库或者组件
include_directories( ${OpenCV_INCLUDE_DIRS} ) # 添加一个用于包含的文件去构建的文件夹
add_executable( DisplayImage DisplayImage.cpp ) # 添加参与编译的项目完整包
target_link_libraries( DisplayImage ${OpenCV_LIBS} ) # 链接的库
(c)生成可执行文件
cd <DisplayImage_directory> # 切换到项目路径当中
cmake . # 编译当前项目
make # 生成可执行文件(名称为Cmake文件中的project()中的名称)
(d)执行程序
./DisplayImage xxx.jpg #添加要显示的图片(图片路径),并且执行
自此,完成项目创建。