gcc/g++/make/cmake/makefile/cmakelists的恩恩怨怨
以前在windows下用VS写代码,不管有多少个文件夹,有多少个文件,写完以后只需要一键就什么都搞定了。但是当移步linux下时,除非你使用图形界面,并且使用Qt creater这类的IDE时,才可以继续像windows下一样一键搞定所有事情,否则就不得不接触gcc/g++/make/cmake/makefile/cmakelists这些东西了,那他们是干什么的呢?彼此之间又是什么关系呢?
1、gcc/g++
gcc是GNU Compiler Collection的全称,是一个编译套件。通过gcc/g++我们就可以完成源文件的编译链接等工作,例如写了一个helloworld.cpp源程序,用: g++ helloworld.cpp -o helloworld就可以编译链接生成出一个名为helloworld的可执行文件了。这是一个文件的情况,但是当一个工程有很多个文件夹很多个文件时,继续通过这种方式一个一个去编译链接,那程序员不吐血才怪,于是便出现了makefile。
2、makefile
makefile其实就是包含了一堆有条理的gcc/g++编译命令的文件,我们可以提前手写好makefile文件,以此来提高工作效率。那有了makefile文件以后又该怎么玩呢?这个时候make就出现了。
3、make
make就是一个读取makefile文件中的指令来完成编译链接工作的工具。
4、CMakelists
手写makefile文件写得很嗨,但是当项目更加庞大时,估计就写得没那么嗨了。于是就出现了CMakelists,有了CMakelists程序员就不需要再去写makefile文件了,程序员只需要写更简单的CMakelists来生成对应的Makefile文件就可以了。那么makefile怎么通过CMakelists来生成呢?没错,就是通过cmake工具生成的。
5、cmake
类似Make工具的功能,CMake工具就是“读取”并执行CMakelists.txt文件中的语句,来生成对应的Makefile。然后开发者就可以通过Make工具来“执行”Makefile了。
总结:论一个程序员变懒的过程。通过cmake读取CMakelists生成Makefile,然后再通过Make工具读取执行Makefile来构建工程。
gcc/g++/make/cmake/makefile/cmakelists的恩恩怨怨的更多相关文章
- GCC G++ Make CMake自我科普
Linux下gcc g++ make cmake 联系和区别 C/C++程序从编写到可执行一般经历这几个阶段 编写源代码 编译器编译代码生成目标文件,如.o文件 链接器链接目标文件和其他目标文件/库文 ...
- Linux 编译工具 gcc/g++、Make/Makefile、CMake/CMakeLists.txt、qmake
前言 编译器的主要工作流程: 源码(Source Code)>> 预处理器(Preprocessor)>> 编译器(Compiler)>> 汇编程序(Assembl ...
- gcc,g++,make,cmake的区别
首先介绍一下GCC:GNU Compiler Collection(GNU 编译器集合),在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是 ...
- OVERVIEW:gcc,g++,cmake,make
首先介绍一下GCC:GNU Compiler Collection(GNU 编译器集合),在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是 ...
- 修改gcc/g++默认include路径
修改gcc/g++默认include路径 转自:http://www.network-theory.co.uk/docs/gccintro/gccintro_23.htmlhttp://ilewen. ...
- CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)
---恢复内容开始--- CentOS 6.6 升级GCC G++ (当前最新GCC/G++版本为v6.1.0) 没有便捷方式, yum update.... yum install 或者 添加y ...
- gcc/g++/make 编译信息带颜色输出
假设编译一个项目错误警告太多.很不好找,所以很希望输出信息能够带有颜色. 但是 gcc 4.9.0 之前的版本号并不支持,非常多情况下是不能替换编译器的,比方使用交叉编译器, 也能够使用 colorg ...
- gcc/g++ 如何支持c11 / c++11标准编译
如果用命令 g++ -g -Wall main.cpp 编译以下代码 : /* file : main.cpp */ #include <stdio.h> int main() { in ...
- 【转】gcc/g++ 如何支持c11 / c++11标准编译
如果用命令 g++ -g -Wall main.cpp 编译以下代码 : 1 2 3 4 5 6 7 8 9 10 11 12 /* file : main.cpp */ #include ...
随机推荐
- JQuery checkbox多选框组选中提交,当选择某(无)一项,其他项禁止选中
在项目中难免会遇到一些表单的提交,尤其是多选框中,当用户选择了某一项时,禁止其他项的选择.所以为了避免这样的冲突,所以我们前端就得控制一下了,下面就来个简单demo,记录一下,有需要的伙伴可以拿去耍耍 ...
- element 确认框 confirm 的写法
this.confirm('内容', '标题', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'success', callbac ...
- 11,html5为什呢只需要写<!DOCTYPE HTML>
11,html5为什呢只需要写<!DOCTYPE HTML> html5不基于SGML,不需要对dtd(百科:翻译为文档类型定义,作用是定义xml文档的合法构建模块,成行声明于xml文档中 ...
- Hadoop重新格式namenode后无法启动datanode的问题
这个很简单的哇~ 格式化namenode之后就会给namenode的ClusterId重新生成,导致与datanode中的ClusterId不一致而无法启动datanode 解决方法: 进入hadoo ...
- 深入浅出Oracle:DBA入门、进阶与诊断案例 PDF 下载
网盘地址: 链接:https://pan.baidu.com/s/1tMFoNSUW7ICKOtmSQ5ZazA 提取码:dbnc
- 07-Docker-Image深入理解
目录 07-Docker-Image深入理解 参考 镜像简介 什么是Docker镜像 什么是Docker容器 镜像结构 镜像特性 镜像层 容器层 镜像存储 07-Docker-Image深入理解 Do ...
- arc066E - Addition and Subtraction Hard
题目链接 题目大意 给定一个只含加减和数字的表达式,在其中添加括号,使其值最大. 解题思路 显然,只有减号后面的括号会使其中表达式的值取反. 然后只有已经有左括号时才能加入右括号. 所以用\(f_0\ ...
- Linux - 查看端口占用、开放情况
1. lsof -i : 2. nmap 127.0.0.1 3. sudo netstat -tunlp (不加sudo看不见PID) 4. gufw 参考 https://askubuntu.co ...
- linux下的apache服务自启动的几种方式
1,如果是安装包安装在Linux系统下,那么可以使用 [root@localhost ~]# service httpd restart 从而可以开启或者重启apache服务 与此同时,它的标准方式是 ...
- 路由器安全-NetFlow
1.NetFlow介绍 提供高层次的诊断,分类和识别网络异常. 使用NetFlow来检查哪些行为改变明显的攻击是非常有效的. 就像Wiretap一样捕获数据包. NetFlow像电话账单.(谁和谁在通 ...