看到我的同事们在帮我调试程序的时候总是会用到cmake和make两个命令,查阅了一下,觉得这位同学总结的比较好,想转载过来,并总结一下。

1. gcc

它是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。

我们的程序只有一个源文件时,直接就可以用gcc命令编译它。

可是,如果我们的程序包含很多个源文件时,该咋整?用gcc命令逐个去编译时,就发现很容易混乱而且工作量大,所以出现了下面make工具。

2. make

make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。

3. makefile

这个是啥东西?

简单的说就像一首歌的乐谱,make工具就像指挥家,指挥家根据乐谱指挥整个乐团怎么样演奏,make工具就根据makefile中的命令进行编译和链接的。makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。

makefile在一些简单的工程完全可以人工拿下,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改,这时候就出现了下面的Cmake这个工具。

4. cmake

cmake就可以更加简单的生成makefile文件给上面那个make用。当然cmake还有其他更牛X功能,就是可以跨平台生成对应平台能用的makefile,我们就不用再自己去修改了。

可是cmake根据什么生成makefile呢?它又要根据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile。

5. CMakeList.txt

到最后CMakeLists.txt文件谁写啊?亲,是你自己手写的。

6. nmake

nmake又是啥东西?

nmake是Microsoft Visual Studio中的附带命令,需要安装VS,实际上可以说相当于linux的make,明白了么?


所以cmake和make的联系大致就是下面这张图。

一般是在终端的操作命令是:

~$ cd /path/to/project
~/path/to/project$ mkdir build
~/path/to/project$ cd build
~/path/to/project/build$ cmake ../
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/project/build
~/path/to/project/build$ make

即可编译完成。

cmake和make的简单理解相关推荐

  1. android 点击事件消费,Android View事件分发和消费源码简单理解

    Android View事件分发和消费源码简单理解 前言: 开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白.中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开 ...

  2. 【转载】Deep learning:十九(RBM简单理解)

    Deep learning:十九(RBM简单理解) 这篇博客主要用来简单介绍下RBM网络,因为deep learning中的一个重要网络结构DBN就可以由RBM网络叠加而成,所以对RBM的理解有利于我 ...

  3. 学习:双机热备、集群、负载均衡、SQL故障转移群集简单理解(转)

    双机热备.集群.负载均衡.SQL故障转移群集简单理解平常,大家常提到几个技术名词:双机热备.集群.负载均衡.SQL故障转移群集.这里,就我的理解,和大家简单探讨下,有不足或错误之处还请各位指出! 这些 ...

  4. 字符串匹配算法Java_如何简单理解字符串匹配算法?

    这篇文章来说说如何简单理解KMP,BM算法.之前看过一些文章说,KMP算法很难理解. 可我并不觉得. 我反而觉得它容易理解.平时我们写java代码的时候, 判断一个字符串是否存在包含另一个字符串都是直 ...

  5. python yield的简单理解

    2019独角兽企业重金招聘Python工程师标准>>> yield是个生成器,它可以使一个方法变成可迭代的方法,每次迭代返回yield后面的值 简单理解: >>>d ...

  6. linun——SElinux的简单理解

    SElinux简单理解 一.什么是SElinux? SELinux 全称 Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Co ...

  7. git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区

    每天一Git之简单理解工作区和暂存区 1. 工作区与暂存区命令初体验 1.1. 暂存区文件与文件夹管理 [root@number ~]# cd GitDir/git_learning/ [root@n ...

  8. c语言理解参数,c语言中对可变参数列表的简单理解

    函数原型中一般情况下参数的数目是固定的,但是如果想在不同的时候接收不定数目的参数时该怎么办呢?c语言提供了可变参数列表来实现. 可变参数列表是通过宏来实现的,这些宏定义在stdarg.h的头文件中.头 ...

  9. QGraphicsScene 的简单理解--关于手册的简要翻译

    文章目录 QGraphicsScene 的简单理解--关于手册的简要翻译 简介: 一般操作: 关于scene's bounding rect: the location of items. scene ...

  10. QTextStream 的简单理解

    文章目录 QTextStream 的简单理解 QTextStream类提供了使用QIODevice读写文本的基本功能. 还有一种通常的用法就是控制台命令的读写 除了QTextStream的构造函数,还 ...

最新文章

  1. thinkphp如何跨模块调用方法呢?
  2. springMvc源码刨析笔记
  3. 肖仰华 | 基于知识图谱的用户理解
  4. mysql主从表结构差异_mysqldiff对比主从表结构是否一致
  5. 外卖餐饮点餐系统,连锁餐饮,公众号小程序源码2.1.5
  6. 360发声明要求腾讯向6亿QQ注册用户道歉
  7. sublime text3占用CPU过高
  8. 存储产业进入闪存时代
  9. android多线程网络通信
  10. 使用Node.js 搭建静态服务器
  11. 【SpringBoot系列】最详细demo--集成JWT实现接口权限认证
  12. win10电脑插入U盘提示文件或目录损坏了如何解决
  13. android 4.4.2 安全漏洞修复
  14. 杰理之SRRC认证杂散超标【篇】
  15. 大道至简之八:透过现象看本质(房价推手)
  16. hapi mysql项目实战路由初始化_hapi框架搭建记录(二):路由改造和生成接口文档...
  17. 【早期笔记】java 开发环境搭建
  18. 强化学习环境全库安装(从mujoco到spinningup)
  19. ublox ubx协议 c语言,Ublox-M8N GPS接收机UBX协议解析
  20. 出海的成本越来越高,奈何

热门文章

  1. 【多式联运】基于模拟退火优化遗传算法求解多式联运运输问题(含碳政策)含Matlab代码
  2. windows10 系统共享文件端口修改
  3. 解密微信电脑版image文件夹下缓存的用户图片
  4. 微信文件夹的dat文件怎么打开_微信dat后缀的文件怎么打开
  5. 关于思源笔记与docker的部分问题
  6. 基于openstack的云桌面开源框架
  7. 除了性以外,有没有快速、高效的释放压力、清空大脑的方式?
  8. 开源项目——小Q聊天机器人V1.2
  9. 漫威十年,好莱坞的转型焦虑
  10. PCB:Beyond Part Models: Person Retrieval with Refined Part Pooling(论文阅读笔记)