【Linux的开胃小菜】CMake和Makefile介绍及经典实战

一、CMake和Makefile入门大全

CMake简介

CMake是一个跨平台的安装编译(Build)工具,可以用简单的语句来描述所有平台的安装(编译过程)。能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。

只是 CMake 的组态档取名为CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的projects/workspaces),然后再依一般的建构方式使用。 这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。

CMake主要特点

1、开放源代码,使用类 BSD 许可发布。下载CMake

2、跨平台,并可生成 native 编译配置文件,在 Linux/Unix 平台,生成 makefile,在苹果平台,可以生成 xcode,在 Windows 平台,可以生成 MSVC 的工程文件。

3、能够管理大型项目,KDE4 就是最好的证明。

4、简化编译构建过程和编译过程,Cmake 的工具链非常简单:cmake+make。

5、高效率,按照 KDE 官方说法,CMake 构建 KDE4 的 kdelibs 要比使用 autotools 来构建 KDE3.5.6 的 kdelibs 快 40%,主要是因为 Cmake 在工具链中没有 libtool。

6、具备可扩展性,可以为 cmake 编写特定功能的模块,扩充 cmake 功能。

在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:

1、编写 CMake 配置文件 CMakeLists.txt 。

2、执行命令 cmake PATH 或者 ccmake PATH 生成Makefile。

3、其中, PATH 是 CMakeLists.txt 所在的目录。 使用 make 命令进行编译。

为什么使用CMake?

假如我们有一个深度学习框架的部分工程列表,里面有超过40个互相调用的工程共同组成,一些用于生成库文件,一些用于实现逻辑功能。他们之间的调用关系复杂而严格,如果我想在这样复杂的框架下进行二次开发,显然只拥有它的源码是远远不够的,还需要清楚的明白这几十个项目之间的复杂关系,在没有原作者的帮助下进行这项工作几乎是不可能的。

即使是原作者给出了相关的结构文档,对新手来说建立工程的过程依旧是漫长而艰辛的,因此CMake的作用就凸显出来了。原作者只需要生成一份CMakeLists.txt文档,框架的使用者们只需要在下载源码的同时下载作者提供的CMakeLists.txt,就可以利用CMake,在”原作者的帮助下“进行工程的搭建。

makefile简述

或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程的编译规则。
一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作, 因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”, 一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

为什么使用makefile?

对于一个大型软件,其编译、维护是一个复杂而耗时的过程。它涉及到大量的文件、目录,这些文件可能是在不同的时间、由不同的人、在不同的地方分别写的,其中一些是程序,有些是数据,有些是文档,有些是衍生文件。甚至参与开发的人员也不一定清楚所有文件的细节,包括如何处理它们。此外,构成软件的文件数目可能达到成百上千,甚至成千上万个,开发过程中当修改了少量几个文件后,往往只需要重新编译、生成少数几个文件。有效地描述这些文件之间的依赖关系以及处理命令,当个别文件改动后仅执行必要的处理,而不必重复整个编译过程,可以大大提高软件开发的效率。

CMake和makefile逻辑

cmke使用案列
makefile经典教程
在这里插入图片描述
Cmake是用来makefile的一个工具:读入所有源文件之后,自动生成makefile。


二、案例实战

Centos7 环境中安装cmake3

1、卸载老版本、下载、解压、安装、版本检查、变更环境 (一气呵成)

[root@/usr/local/src/]# yum -y remove cmake   #卸载老版本,因为之前提示最少3.1.3版本
[root@/usr/local/src/]# wget https://cmake.org/files/v3.7/cmake-3.7.2.tar.gz   #下载网页源码包
[root@/usr/local/src/]# tar xf cmake-3.7.2.tar.gz   #解压
[root@/usr/local/src/]#cd cmake-3.7.2   #切换该路径

[root@/usr/local/src/]#./bootstrap   #安装cmake3.7.2
[root@/usr/local/src/]# gmake  
[root@/usr/local/src/]# gmake install 

[root@/usr/local/src/]# ln -s /usr/local/src/cmake3.7.2  /usr/bin/   #创建软链接
[root@/usr/local/src/]# cmake --version  #版本检查
cmake version 3.7.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

Ubuntu14.04(通用)安装CMake3

提示:需要安装前必须安装g++,安装之后操作

[root@/usr/local/src/]# apt-get remove cmake   #卸载老版本,因为之前提示最少3.1.3版本
[root@/usr/local/src/]# wget https://cmake.org/files/v3.7/cmake-3.7.2.tar.gz   #下载网页源码包(可自行选择版本)
[root@/usr/local/src/]# tar xf cmake-3.7.2.tar.gz   #解压
[root@/usr/local/src/]#cd cmake-3.7.2   #切换该路径

[root@/usr/local/src/]#sudo ./bootstrap   #安装cmake3.7.2
[root@/usr/local/src/]# sudo make
[root@/usr/local/src/]# sudo make install 

[root@/usr/local/src/]# ln -s /usr/local/src/cmake3.7.2  /usr/bin/   #创建软链接
[root@/usr/local/src/]# cmake --version  #版本检查
cmake version 3.7.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

其他

如果你想要通过CMake安装OpenCV+OpenCV_Contrib
那么,这里安装的CMake有所不同,得需要让CMake支持HTTPS,这样后续make的时候才不会报一些奇葩的错误。

tar -xf cmake-3.14.4.tar.gz

cd cmake-3.14.4

sudo apt-get install libcurl4-gnutls-dev

sudo apt-get install zlib1g-dev

./bootstrap --system-curl

sudo make && sudo make install

To strive, to seek, to find, and not to yield. 去奋斗,去追求,去发现,不屈服。
本篇完_

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋刀鱼_天官

奇迹每天都在发生!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值