Linux

GCC ,Clang 与 make,cmake 一览

2019-05-01  本文已影响0人  linheimx

GCC

GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划的关键部分,亦是自由的类Unix及苹果电脑 Mac OS X 操作系统的标准编译器
GCC 原名为 GNU C 语言编译器,因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。之后也变得可处理 Fortran、Pascal、Objective-C、Java, 以及 Ada与其他语言。

Clang

Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。

LLVM

LLVM 是 Low Level Virtual Machine 的简称,这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。简而言之,可以作为多种语言编译器的后台来使用。

本上都是三段式的,可以分为前端、优化器和后端。前端负责解析源代码,检查语法错误,并将其翻译为抽象的语法树;优化器对这一中间代码进行优化,试图使代码更高效;后端则负责将优化器优化后的中间代码转换为目标机器的代码,这一过程后端会最大化的利用目标机器的特殊指令,以提高代码的性能。基于这个认知,我们可以认为 LLVM 包括了两个概念:一个广义的 LLVM 和一个狭义的 LLVM 。广义的 LLVM 指的是一个完整的 LLVM 编译器框架系统,包括了前端、优化器、后端、众多的库函数以及很多的模块;而狭义的 LLVM 则是聚焦于编译器后端功能的一系列模块和库,包括代码优化、代码生成、JIT 等。

Clang历史

Apple吸收Chris Lattner的目的要比改进GCC代码优化宏大得多:

  1. GCC系统庞大而笨重
  2. 而Apple大量使用的Objective-C在GCC中优先级很低。
  3. 此外GCC作为一个纯粹的编译系统,与IDE配合得很差。
  4. 加之许可证方面的要求,Apple无法使用LLVM 继续改进GCC的代码质量。

于是,Apple决定从零开始写 C、C++、Objective-C语言的前端 Clang,完全替代掉GCC。
正像名字所写的那样,Clang只支持C,C++和Objective-C三种C家族语言

GCC、LLVM-GCC、LLVM Compiler这三个编译选项的不同点

对比

Clang特性

GCC 优势


make

make工具相当于一个智能的批处理工具,本身没有编译和链接的功能,而是用类似于批处理的方式通过调用makefile文件中用户指定的命令来进行编译和链接。
**而makefile又是什么? **

它里面记录了用户将要执行的一系列命令,make根据makefile中的命令对相应的源文件进行编译和链接的。

makefile中可能就有类似的一下命令:gcc -o test.c。
makefile文件在github源码安装程序中很常见,你下载了一个源码包,通常在readme中会有这样的一句:

$ make all
$ make install # root required

make all即编译所有,当然这个源码包中必须有makefile文件才行,执行make all这个命令后make会根据makefile中的命令进行编译。当然这个是“别人家”的源码包,这个通常都给你写好了,但是如果你自己要编译很多源文件的时候,也是要自己写吗?

cmake

参考

  1. https://oldpan.me/archives/gcc-make-cmake-clang-tell
  2. https://xuhehuan.com/2738.html
  3. https://www.cnblogs.com/qoakzmxncb/archive/2013/04/18/3029105.html
上一篇 下一篇

猜你喜欢

热点阅读