cmake和make的简单理解
看到我的同事们在帮我调试程序的时候总是会用到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的简单理解相关推荐
- android 点击事件消费,Android View事件分发和消费源码简单理解
Android View事件分发和消费源码简单理解 前言: 开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白.中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开 ...
- 【转载】Deep learning:十九(RBM简单理解)
Deep learning:十九(RBM简单理解) 这篇博客主要用来简单介绍下RBM网络,因为deep learning中的一个重要网络结构DBN就可以由RBM网络叠加而成,所以对RBM的理解有利于我 ...
- 学习:双机热备、集群、负载均衡、SQL故障转移群集简单理解(转)
双机热备.集群.负载均衡.SQL故障转移群集简单理解平常,大家常提到几个技术名词:双机热备.集群.负载均衡.SQL故障转移群集.这里,就我的理解,和大家简单探讨下,有不足或错误之处还请各位指出! 这些 ...
- 字符串匹配算法Java_如何简单理解字符串匹配算法?
这篇文章来说说如何简单理解KMP,BM算法.之前看过一些文章说,KMP算法很难理解. 可我并不觉得. 我反而觉得它容易理解.平时我们写java代码的时候, 判断一个字符串是否存在包含另一个字符串都是直 ...
- python yield的简单理解
2019独角兽企业重金招聘Python工程师标准>>> yield是个生成器,它可以使一个方法变成可迭代的方法,每次迭代返回yield后面的值 简单理解: >>>d ...
- linun——SElinux的简单理解
SElinux简单理解 一.什么是SElinux? SELinux 全称 Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Co ...
- git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区
每天一Git之简单理解工作区和暂存区 1. 工作区与暂存区命令初体验 1.1. 暂存区文件与文件夹管理 [root@number ~]# cd GitDir/git_learning/ [root@n ...
- c语言理解参数,c语言中对可变参数列表的简单理解
函数原型中一般情况下参数的数目是固定的,但是如果想在不同的时候接收不定数目的参数时该怎么办呢?c语言提供了可变参数列表来实现. 可变参数列表是通过宏来实现的,这些宏定义在stdarg.h的头文件中.头 ...
- QGraphicsScene 的简单理解--关于手册的简要翻译
文章目录 QGraphicsScene 的简单理解--关于手册的简要翻译 简介: 一般操作: 关于scene's bounding rect: the location of items. scene ...
- QTextStream 的简单理解
文章目录 QTextStream 的简单理解 QTextStream类提供了使用QIODevice读写文本的基本功能. 还有一种通常的用法就是控制台命令的读写 除了QTextStream的构造函数,还 ...
最新文章
- thinkphp如何跨模块调用方法呢?
- springMvc源码刨析笔记
- 肖仰华 | 基于知识图谱的用户理解
- mysql主从表结构差异_mysqldiff对比主从表结构是否一致
- 外卖餐饮点餐系统,连锁餐饮,公众号小程序源码2.1.5
- 360发声明要求腾讯向6亿QQ注册用户道歉
- sublime text3占用CPU过高
- 存储产业进入闪存时代
- android多线程网络通信
- 使用Node.js 搭建静态服务器
- 【SpringBoot系列】最详细demo--集成JWT实现接口权限认证
- win10电脑插入U盘提示文件或目录损坏了如何解决
- android 4.4.2 安全漏洞修复
- 杰理之SRRC认证杂散超标【篇】
- 大道至简之八:透过现象看本质(房价推手)
- hapi mysql项目实战路由初始化_hapi框架搭建记录(二):路由改造和生成接口文档...
- 【早期笔记】java 开发环境搭建
- 强化学习环境全库安装(从mujoco到spinningup)
- ublox ubx协议 c语言,Ublox-M8N GPS接收机UBX协议解析
- 出海的成本越来越高,奈何
热门文章
- 【多式联运】基于模拟退火优化遗传算法求解多式联运运输问题(含碳政策)含Matlab代码
- windows10 系统共享文件端口修改
- 解密微信电脑版image文件夹下缓存的用户图片
- 微信文件夹的dat文件怎么打开_微信dat后缀的文件怎么打开
- 关于思源笔记与docker的部分问题
- 基于openstack的云桌面开源框架
- 除了性以外,有没有快速、高效的释放压力、清空大脑的方式?
- 开源项目——小Q聊天机器人V1.2
- 漫威十年,好莱坞的转型焦虑
- PCB:Beyond Part Models: Person Retrieval with Refined Part Pooling(论文阅读笔记)