cmake入门笔记

cmake入门笔记

linux下opencv程序有两种编译方式,一种是使用gcc/g++结合pkg-config的方式;另一种是使用cmake。因此,我就学习了一下cmake的使用,在这里做一下记录。我使用的cmake version 2.8.12.2。

官网:https://cmake.org/

cmake简介

cmake是一个跨平台的开源安装编译工具,可以用简单的语句描述所有平台的安装以及编译过程。能输出各种形式的Makefile或者project文件。

环境搭建

cmake安装十分方便,在终端输入:
sudo apt-get install cmake

示例

一、简单示例

1、编写一个简单程序(test.cpp)
#include<iostream>
using namespace std;
int main()
{
    cout<<"Hello World!"<<endl;
    return 0;
}
2、编写CMakeLists.txt文件

在test.cpp同一目录中新建CMakeLists.txt文件,内容如下:

project(hello)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. DIR_MIAN)
add_executable(test ${DIR_MIAN})

cmake语法由命令,注释(#)和空格组成,其中命令不区分大小写。符号#后面的内容被认为是注释,命令由命令名称、小括号和参数组成,参数之间使用空格分开。
上面的CMakeLists.txt具体含义:
1. project命令表示项目名称为hello
2. cmake_minimum_required命令限定cmake的版本最少为2.8;
3. aux_source_directory命令是将当前目录下的源文件名称赋值给DIR_MIAN变量;
4. add_executable命令表示要将DIR_MIAN中的源文件编译成一个名为test的可执行文件。

3、编译执行

在当前目录下执行命令:

cmake .
make
./test

二、多源文件目录实例

学习cmake的目的是需要使用opencv,因此这里的例子是opencv的简单例子。
文件分布情况:

./test
    |
    +---  test.cpp
    +---  lena.jpg
    +---  src
            |
            +---  my_opencv_tool.h
            +---  my_opencv_tool.cpp
1、源码

test.cpp:

#include"my_opencv_tool.h"

using namespace cv;
int main()
{
    Mat img = imread("lena.jpg");//读取图片
    assert(img.data);
    my_imshow("test",img); //显示图片
    waitKey(0);
    return 0;
}

my_opencv_tool.h:

#ifndef __MY_OPENCV_TOOL__
#define __MY_OPENCV_TOOL__

#include<iostream>
#include<cv.h>
#include<highgui.h>
using namespace std;
using namespace cv;

void my_imshow(const string& win_name,const Mat& img);

#endif

my_opencv_tool.cpp:

#include"my_opencv_tool.h"

void my_imshow(const string& win_name,const Mat& img)
{
    namedWindow(win_name);
    imshow(win_name,img);
}
2、编写主目录下的CMakeLists.txt

test目录下创建CMakeLists.txt,内容:

project(opencv)
cmake_minimum_required(VERSION 2.8)
add_subdirectory(src)
aux_source_directory(. DIR_SRCS)
include_directories(src)
add_executable(test ${DIR_SRCS})
target_link_libraries(test libmy_opencv_tool)
find_package(OpenCV REQUIRED)
target_link_libraries(test ${OpenCV_LIBS})

这里跟上一个例子中新增了一些命令:
1. add_subdirectory命令用来添加一个需要进行构建的子目录;
2. include_directories命令用来设定头文件目录;
3. target_link_libraries命令用来指定test需要链接后面的库,libmy_opencv_tool是我src目录下文件生成的库,${OpenCV_LIBS}表示opencv的库。
4. find_package会根据cmake内置的脚本去找相应库的模块,REQUIRED表示必须的。

3、编写子目录下的CMakeLists.txt

src子目录下创建CMakeLists.txt,内容如下:

aux_source_directory(. DIR_MY_TOOL)
find_package(OpenCV REQUIRED)
add_library(libmy_opencv_tool ${DIR_MY_TOOL})
target_link_libraries(libmy_opencv_tool ${OpenCV_LIBS})
4、编译执行

test目录下执行命令:

cmake .
make
./test

参考:
http://blog.csdn.net/fan_hai_ping/article/details/42524205
https://www.ibm.com/developerworks/cn/linux/l-cn-cmake/index.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值