各种编译器的介绍

第一种:minGW-w64

一、什么是 MinGW-w64 ?
MinGW 的全称是:Minimalist GNU on Windows 。它实际上是将经典的开源 C语言 编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windows 不具备的,Linux平台下的开发工具。一句话来概括:MinGW 就是 GCC 的 Windows 版本 。

以上是 MinGW 的介绍,MinGW-w64 与 MinGW 的区别在于 MinGW 只能编译生成32位可执行程序,而 MinGW-w64 则可以编译生成 64位 或 32位 可执行程序。

正因为如此,MinGW 现已被 MinGW-w64 所取代,且 MinGW 也早已停止了更新,内置的 GCC 停滞在了 4.8.1 版本,而 MinGW-w64 内置的 GCC 则更新到了 6.2.0 版本。

 

二、为什么使用 MinGW-w64 ?
1. MinGW-w64 是开源软件,可以免费使用。
2. MinGW-w64 由一个活跃的开源社区在持续维护,因此不会过时。
3. MinGW-w64 支持最新的 C语言 标准。
4. MinGW-w64 使用 Windows 的C语言运行库,因此编译出的程序不需要第三方 DLL ,可以直接在 Windows 下运行。
5. 那些著名的开源 IDE 实际只是将 MinGW-w64 封装了起来,使它拥有友好的图形化界面,简化了操作,但内部核心仍然是 MinGW-w64。

MinGW-w64 是稳定可靠的、持续更新的 C/C++ 编译器,使用它可以免去很多麻烦,不用担心跟不上时代,也不用担心编译器本身有bug,可以放心的去编写程序。

 

三、MinGW-w64 适合做什么?
对于熟悉 MinGW-w64 的高手而言,它可以编译任何 C语言 程序。但对于一般人来说,MinGW-w64 太过简陋,连图形用户界面都没有。这让习惯使用鼠标的人,感到很痛苦。虽然也可以通过一些配置,让 MinGW-w64 拥有图形用户界面,但那个过程非常麻烦。

除此之外,编译复杂的程序时,还需要你会编写 Makefile ,否则只能一个文件一个文件的编译,可想而知会多么辛苦。

但对于初学 C语言 的人来说,MinGW-w64 是正合适的编译器,至少黑色的命令提示符界面很有编程的气氛,感觉很酷。

在刚开始学 C语言 时,所有代码通常都写在一个文件中,只要输入几个简单的命令,就能用 MinGW-w64 编译成可执行文件。虽然  VS2015 等编译器,只要点击下鼠标就可以完成编译,但它会自动生成一大堆工程文件,让初学者摸不着头脑。而 MinGW-w64 则只会生成一个可执行文件。

如果对 MinGW-w64 和 VS2015 等编译器进行一下形容,那么 MinGW-w64 是手动的,而  VS2015 等编译器则是自动的。因此 MinGW-w64 的编译过程更加直观容易理解,也比较适合C语言学习。

总而言之,对于一般人来说,MinGW-w64 适合学习 C语言 时使用,真正工作还是用  VS2015 更好。当然如果您是在 Linux 下工作,那么Code::Blocks可能是一个选择,不过最大的可能是您必须习惯使用 GCC 来编译程序。

第二种:GCC

GNU Compiler Collection(GCC)
GNU编译器集合(GCC)是用于编程的编译器集合,如c++、C、Objective-C、Java和Fortran。GCC版本是通过一个通过命令行操作的自由软件基础来实现的。GCC开发是由Richard Stallman作为GNU项目的一部分进行的。

对于每一种编程语言,GCC 包含其独立的程序。在GCC中,所有语言都有一个共同的内部结构,该结构由一个特定于语言的前端组成,该前端解析程序并生成一个抽象语法树和后端。

GCC也包含了ANSI C编译器里的所有特性。这个编译器允许多个级别的源代码错误检查,这些检查通常由其他工具提供。它还对结果对象代码和调试信息执行许多类型的优化。

GCC是许多操作系统的主要编译器。由于GCC是自由可获得的软件,因此许多的软件也是基于GCC。上述的这类软件主要包括用C创建并通过GCC编译的软件。

在众多的国家中,GCC由一个多样化的团体来维护,而变化则由一个委员会来管理。这一原则为大家提供了优秀的编译器,可以在某些体系结构和各种环境下工作。GCC还增加了更多的语言、优化、目标,并提高了调试周期的速度。

GCC有各种各样的体系结构指令集,广泛用作开发自由软件和专有软件的工具。它也可用于嵌入式系统,并适用于各种平台。

GCC有许多拓展GCC编译器的插件。通过插件,开发人员可以在Gimple表示层上添加、替换或删除中间端传递操作系统。GCC的Python插件从编译器内部调用任意的Python脚本。MELT插件允许高级Lisp语言扩展GCC。

对于C语言的编译,GCC编译器使用以下命令:

gcc program.c -o targetFile
这里program.c是C源文件名,其中 targetFile 是执行的目标文件 (二进制文件)。

第三种:G++

GNU C++ Compiler(G++)

GNU提供了C++的优化编译器,也就是众所周知的G++。它可以在各种处理器上运行,大家可以在Emacs下找到完整的文档。与GCC一样,G++包含独立的程序。通过这个编译器,所有的语言都使用通用的内部结构,该结构由特定于语言的前端组成,前端解析程序并创建抽象语法树和后端。

G++主要用于编译C++编程语言。它是不同操作系统(如Linux、BSD和MAC OS x)中的主编译器。它是免费提供的软件,支持许多用c++编程语言创建并使用g++编译的自由软件。

如果您想编译C++文件,那么您将需要使用包含C++代码的文件名的G++编译器。如果您的文件不包含任何错误,那么它将成为可执行文件。

g++是强大的编译器,为您提供了许多可能的选项。G++浏览文档部分,并从命令提示符中查看您的g++版本附带的文档

GCC和g++之间的主要区别是文件名扩展名。gcc将. C文件视为C文件,而g++同时将. C和cpp文件视为c++文件

在编译阶段,G++调用GCC,因此G++是完整的编译器,而不是任何其他编译器的预处理器。这个编译器从源代码构建目标代码,它不生成程序的任何中间C版本。g++是一个完整的编译器,具有不同的前端,并调用相同的后端。

在编译c++程序时,GCC在默认情况下是不链接的,假设您需要使用-Istdc ++命令进行链接。默认情况下,g++会自动链接到c++库。

为了编译c++程序,g++使用以下命令

g++ program.cpp –o targetFile
这里program.cpp是c++源文件名,targetFile 是执行的目标文件。

第四种:llvm+Clang

LLVM官方网站:http://llvm.org/
Clang官方网站:http://clang.llvm.org/get_started.html

LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。LLVM计划启动于2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持开展。2006年Chris Lattner加盟Apple Inc.并致力于LLVM在Apple开发体系中的应用。Apple也是LLVM计划的主要资助者.

Low Level Virtual Machine (LLVM) 是一个开源的编译器架构,它已经被成功应用到多个应用领域。Clang ( 发音为 /klæŋ/) 是 LLVM 的一个编译器前端,它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程语言。Clang 对源程序进行词法分析和语义分析,并将分析结果转换为 Abstract Syntax Tree ( 抽象语法树 ) ,最后使用 LLVM 作为后端代码的生成器。
Clang 的开发目标是提供一个可以替代 GCC 的前端编译器。与 GCC 相比,Clang 是一个重新设计的编译器前端,具有一系列优点,例如模块化,代码简单易懂,占用内存小以及容易扩展和重用等。由于 Clang 在设计上的优异性,使得 Clang 非常适合用于设计源代码级别的分析和转化工具。Clang 也已经被应用到一些重要的开发领域,如 Static Analysis 是一个基于 Clang 的静态代码分析工具。

第五种:MSVC系列

与Visual Studio集成发布,微软自己的编译器,VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。

作者:zlrs
链接:https://www.jianshu.com/p/9345dfc35759
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

posted @ 2022-03-19 16:26  AlexSun_2021  阅读(1685)  评论(0编辑  收藏  举报