gcc、clang以及make和cmake的辨析

转载https://oldpan.me/archives/gcc-make-cmake-clang-tell
参考链接:https://www.bilibili.com/video/BV1kU4y1u7uz?share_source=copy_web

gcc,llvmhe clang

传统的编译器通常分为3个部分:前端(frontEnd)、优化器(Optimizer)和后端(backEnd)。
在编译的过程中,前端主要负责词法和语法分析,将源代码转化为抽象语法树,优化器则是在前端的基础上,对得到的中间代码进行优化,使代码更加高效。后端则是将已经优化的中间代码转化为针对各自平台的机器代码。

GCC

GNU Compiler Collection,GNU编译器套装,是由GNU开发的编程语言编译器。GCC原本只能处理C语言,但是后来演进,变得可处理C++、Fortran、Pascal、Java、Object-C,Java,以及Ada等语言。

LLVM

LLVM(Low Level Virtual Machine,底层虚拟机),提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成,也就是可以作为多种编译的后台来使用。苹果公司之前一直使用GCC作为官方的编译器,因为GCC开源,一直做得也不错,但Apple公司对编译工具会提出更高的要求,因为Apple对Objective-C以及后来的C语言,都新增了很多特性,
但是GCC开发者并不给Apple进行专门的实现。所以后来就分成了两条分支分别进行开发。
不给开发的原因是GCC的代码耦合度太高,很难独立,而且越到后期,代码的质量越差。
单Apple想做的很多功能,比如更好的IDE支持等,需要模块化的方式调用GCC,但是GCC一直不给做,

LLVM2.0-Clang

Apple吸收ChrisLattner的目的要比改进GCC代码更具野心,Apple打算从零开始写C、C++和Objective- C,想要完全替代掉GCC。
Clang是LLVM的前端,可以用来编译C,C++,ObjectiveC等语言,Clang则是以LLVM为后端的一款高效易用并且与IDE结合很好的编译前端,Clang只支持C、C++和Objective- C三种语言。2007年开始开发,C编译器最早完成,
LLVM GCC是Xcode 4的预设选项,选项使用的是GCC parser,向后兼容应该也没有问题。

你可能感兴趣的:(C++,c++)