編譯器筆記

GCC

http://gcc.gnu.org/

GCC(GNU Compiler Collection,GNU編譯器套件)是由GNU開發的編程語言譯器。
(GNU操作系統是一種由自由軟件構成的類Unix操作系統,名稱來自【GNU’s Not Unix!】的遞歸縮寫,該系統基於Linux內核,目標在於建立一個完全相容於UNIX的自由軟件環境。)

MinGW(windows上的GCC)

www.mingw.org/

MinGW,是Minimalist GNU for Windows的縮寫。它是一個可自由使用和自由發佈的Windows特定頭文件和使用GNU工具集導入庫的集合,允許你在GNU/Linux和Windows平臺生成本地的Windows程序而不需要第三方C運行時(C Runtime)庫。

CMake(不是編譯器)

https://cmake.org/

Cmake,是一種省事的工具。gcc編譯單個文件,make可以批量編譯但是需要寫makefile,cmake則是生成makefile並調用make來實現批量編譯。
make和cmake的區別

MSVC

https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads

MSVC,即MicroSoft Visual C++,微軟的VC編譯器。
我們平時說【缺少msvcXXXX.dll】比如:MSVCP140.dll是Visual Studio 2015 [1]的Visual C ++ Redistributable的組成文件。這整個文件包負責運行使用Visual Studio 2015構建的C ++應用程序所需的運行時組件。

Windows下使用Visual Studio自帶的MSVC,命令行編譯C/C++程序
Windows下VS套件自帶的編譯程序有以下這些:

cl.exe:編譯程序【最常出現錯誤提示的】
link.exe:鏈接程序
lib.exe:加載lib庫的程序
nmake.exe:用Makefile進行構建、編譯的工具

Clang

https://clang.llvm.org/ 

Clang是一個C語言、C++、Objective-C、Objective-C++語言的輕量級編譯器,兼容GCC。
【隸屬於llvm項目】(LLVM是構架編譯器(compiler)的框架系統,以C++編寫而成,用於優化以任意程序語言編寫的程序的編譯時間(compile-time)、鏈接時間(link-time)、運行時間(run-time)以及空閒時間(idle-time),對開發者保持開放,併兼容已有腳本。)


本處摘自:llvm初識及clang套件安裝工具
編譯器主要的構成分爲三部分:

前端 -- AST -- 後端

前端用於源碼解析,最終生成表示源碼邏輯的抽象語法樹(Abstract Syntax Tree,AST),後端主要將抽象表示的中間代碼轉爲最後適用平臺的機器碼。

LLVM本身並不是編譯器,而是一種編譯器的基礎架構,在編譯器構成部分中,作爲一個基礎後端,進行機器碼的生成處理。
clang並不是編譯器,clang是LLVM編譯架構的編譯前端而已,僅僅是LLVM衆多項目中的一個。而整個的編譯過程最終都要LLVM的編譯基礎架構將生成的中間碼轉成機器碼。


另附:知乎上有人問的比較
GCC/G++、ICC、Clang、MSVC、BCC等C/C++編譯器有什麼特長和不足?

說說集成開發環境

一般來說IDE(集成開發環境)其實就是,
文本編輯器-> 系統命令行調用編譯器-> 編譯、鏈接、生成

我們寫程序大體步驟爲:
1、用編輯器編寫源代碼,例如.c文件;
2、用編譯器編譯代碼生成目標文件,例如.o文件;
3、用鏈接器連接目標代碼生成可執行文件,例如.exe文件等。

文本編輯器vscode,用命令行使用MSVC編譯器,實現編譯代碼
在VS code中使用MSVC+命令行編譯生成C++程序

再往後查,就是自己動手"開發工具鏈"了,萌新我瑟瑟發抖……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章