以前在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的恩恩怨怨的更多相关文章

  1. GCC G++ Make CMake自我科普

    Linux下gcc g++ make cmake 联系和区别 C/C++程序从编写到可执行一般经历这几个阶段 编写源代码 编译器编译代码生成目标文件,如.o文件 链接器链接目标文件和其他目标文件/库文 ...

  2. Linux 编译工具 gcc/g++、Make/Makefile、CMake/CMakeLists.txt、qmake

    前言 编译器的主要工作流程: 源码(Source Code)>> 预处理器(Preprocessor)>> 编译器(Compiler)>> 汇编程序(Assembl ...

  3. gcc,g++,make,cmake的区别

    首先介绍一下GCC:GNU Compiler Collection(GNU 编译器集合),在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是 ...

  4. OVERVIEW:gcc,g++,cmake,make

    首先介绍一下GCC:GNU Compiler Collection(GNU 编译器集合),在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是 ...

  5. 修改gcc/g++默认include路径

    修改gcc/g++默认include路径 转自:http://www.network-theory.co.uk/docs/gccintro/gccintro_23.htmlhttp://ilewen. ...

  6. CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)

    ---恢复内容开始--- CentOS 6.6 升级GCC G++ (当前最新GCC/G++版本为v6.1.0) 没有便捷方式, yum update....   yum install 或者 添加y ...

  7. gcc/g++/make 编译信息带颜色输出

    假设编译一个项目错误警告太多.很不好找,所以很希望输出信息能够带有颜色. 但是 gcc 4.9.0 之前的版本号并不支持,非常多情况下是不能替换编译器的,比方使用交叉编译器, 也能够使用 colorg ...

  8. gcc/g++ 如何支持c11 / c++11标准编译

    如果用命令 g++ -g -Wall main.cpp  编译以下代码 : /* file : main.cpp */ #include <stdio.h> int main() { in ...

  9. 【转】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 ...

随机推荐

  1. dockerfile的编写参数

    注意细节 “#”号开头是注释 ,指令不区分大小写,顺序执行 FROM 指定基础镜像:注意必须是文件里第一个非注释行 ENV name 值 设置变量,注意没有=号 变量引用 ${name:-chenxi ...

  2. 计算机网络 --- IP 地址

    概述 这一节主要了解网络中有关ip的知识,包括子网掩码等等,还有 ipv6的生成规则等等. 基本的ip结构 分类寻址 主要分为 ABCDE ,由两部分组成,网络号 + 主机号 . 可以看到 A 和 C ...

  3. 6,html5的离线储存怎么用

    6,html5的离线储存怎么用 客户端:(百科:或称为用户端,是指与服务器相对应,为客户提供本地服务的程序.除了一些只在本地运行的应用程序,一般安装在客户机上,需要与服务端配合运行) 在用户没有和因特 ...

  4. ubuntu 18.04中nginx不能访问软链接目录中的内容

    解决办法:以root权限运行nginx,即修改/etc/nginx/nginx.conf中的user www-data为root

  5. DL4J之CNN对今日头条文本分类

    一.数据集介绍 数据来源:今日头条客户端 数据格式如下: 6551700932705387022_!_101_!_news_culture_!_京城最值得你来场文化之旅的博物馆_!_保利集团,马未都, ...

  6. Python的 REPL 模式

    REPL Read Eval Print Loop读取,执行,输出,循环 在REPL环境中,你输入一句话,他就读取,执行,输出一个结果,所以也称为 交互式提示模式这是python代码最简单的方式,也揭 ...

  7. 使用URLConnection获取页面返回的xml数据

    public static void main(String[] args) throws Exception { String path="http://flash.weather.com ...

  8. SprintBoot学习(三)

    Thymeleaf模板引擎 1.thymeleaf是一个Java类库,,他是xml/xhtml/html5的模板引擎可以作为view层 2.themeleaf基本语法 引入thymeleaf < ...

  9. 【SSM】AppFileUtils

    11 package com.kikyo.sys.utils; import java.io.File; import java.io.IOException; import java.io.Inpu ...

  10. C语言-define 与do{}while(0)

    问题引出: 我们都知道宏定义#define只是简单替换,所以遇到复杂的带参数宏,必须很小心的为需要的参数加上括号“()”:同样碰到复杂的多条语句替代,虽然加{}可以将其封装成一个整体,但同时又有另一个 ...