GCC ,Clang 與 make,cmake 一覽

GCC

GCC(GNU Compiler Collection,GNU編譯器套裝)闻丑,是一套由 GNU 開發(fā)的編程語言編譯器。它是一套以 GPL 及 LGPL 許可證所發(fā)行的自由軟件勋颖,也是 GNU計劃的關(guān)鍵部分嗦嗡,亦是自由的類Unix及蘋果電腦 Mac OS X 操作系統(tǒng)的標(biāo)準(zhǔn)編譯器
GCC 原名為 GNU C 語言編譯器饭玲,因為它原本只能處理 C語言侥祭。GCC 很快地擴(kuò)展,變得可處理 C++茄厘。之后也變得可處理 Fortran矮冬、Pascal、Objective-C次哈、Java, 以及 Ada與其他語言胎署。

Clang

Clang 是一個 C++ 編寫、基于 LLVM窑滞、發(fā)布于 LLVM BSD 許可證下的 C/C++/Objective C/Objective C++ 編譯器琼牧,其目標(biāo)(之一)就是超越 GCC。

LLVM

LLVM 是 Low Level Virtual Machine 的簡稱哀卫,這個庫提供了與編譯器相關(guān)的支持巨坊,能夠進(jìn)行程序語言的編譯期優(yōu)化、鏈接優(yōu)化聊训、在線編譯優(yōu)化抱究、代碼生成。簡而言之带斑,可以作為多種語言編譯器的后臺來使用鼓寺。

本上都是三段式的勋拟,可以分為前端、優(yōu)化器和后端妈候。前端負(fù)責(zé)解析源代碼敢靡,檢查語法錯誤,并將其翻譯為抽象的語法樹苦银;優(yōu)化器對這一中間代碼進(jìn)行優(yōu)化啸胧,試圖使代碼更高效;后端則負(fù)責(zé)將優(yōu)化器優(yōu)化后的中間代碼轉(zhuǎn)換為目標(biāo)機(jī)器的代碼幔虏,這一過程后端會最大化的利用目標(biāo)機(jī)器的特殊指令纺念,以提高代碼的性能∠肜ǎ基于這個認(rèn)知陷谱,我們可以認(rèn)為 LLVM 包括了兩個概念:一個廣義的 LLVM 和一個狹義的 LLVM 。廣義的 LLVM 指的是一個完整的 LLVM 編譯器框架系統(tǒng)瑟蜈,包括了前端烟逊、優(yōu)化器、后端铺根、眾多的庫函數(shù)以及很多的模塊宪躯;而狹義的 LLVM 則是聚焦于編譯器后端功能的一系列模塊和庫,包括代碼優(yōu)化位迂、代碼生成访雪、JIT 等。

Clang歷史

Apple吸收Chris Lattner的目的要比改進(jìn)GCC代碼優(yōu)化宏大得多:

  1. GCC系統(tǒng)龐大而笨重
  2. 而Apple大量使用的Objective-C在GCC中優(yōu)先級很低掂林。
  3. 此外GCC作為一個純粹的編譯系統(tǒng)冬阳,與IDE配合得很差。
  4. 加之許可證方面的要求党饮,Apple無法使用LLVM 繼續(xù)改進(jìn)GCC的代碼質(zhì)量。

于是驳庭,Apple決定從零開始寫 C刑顺、C++、Objective-C語言的前端 Clang饲常,完全替代掉GCC蹲堂。
正像名字所寫的那樣,Clang只支持C贝淤,C++和Objective-C三種C家族語言柒竞。

  • 2007年開始開發(fā),C編譯器最早完成播聪,
  • 而由于Objective-C相對簡單朽基,只是C語言的一個簡單擴(kuò)展布隔,很多情況下甚至可以等價地改寫為C語言對Objective-C運行庫的函數(shù)調(diào)用,因此在2009年時稼虎,已經(jīng)完全可以用于生產(chǎn)環(huán)境衅檀。
  • C++的支持也熱火朝天地進(jìn)行著。

GCC霎俩、LLVM-GCC哀军、LLVM Compiler這三個編譯選項的不同點

對比

Clang特性

  • 快:通過編譯 OS X 上幾乎包含了所有 C 頭文件的 carbon.h 的測試,包括預(yù)處理 (Preprocess)打却,語法 (lex)杉适,解析 (parse),語義分析 (Semantic Analysis)柳击,抽象語法樹生成 (Abstract Syntax Tree) 的時間猿推,Clang 是 Apple GCC 4.0 的 2.5x 快。(2007-7-25)
  • 內(nèi)存占用心迥骸:Clang 內(nèi)存占用是源碼的 130%彤守,Apple GCC 則超過 10x。
  • 診斷信息可讀性強(qiáng):錯誤的語法不但有源碼提示哭靖,還會在錯誤的調(diào)用和相關(guān)上下文的下方有~~~~~和^的提示具垫,相比之下 GCC 的提示很天書。
  • GCC 兼容性试幽。
  • 設(shè)計清晰簡單筝蚕,容易理解,易于擴(kuò)展增強(qiáng)铺坞。與代碼基礎(chǔ)古老的 GCC 相比起宽,學(xué)習(xí)曲線平緩。
  • 基于庫的模塊化設(shè)計济榨,易于 IDE 集成及其他用途的重用坯沪。由于歷史原因,GCC 是一個單一的可執(zhí)行程序編譯器擒滑,其內(nèi)部完成了從預(yù)處理到最后代碼生成的全部過程腐晾,中間諸多信息都無法被其他程序重用。Clang 將編譯過程分成彼此分離的幾個階段丐一,AST 信息可序列化藻糖。通過庫的支持,程序能夠獲取到 AST 級別的信息库车,將大大增強(qiáng)對于代碼的操控能力巨柒。對于 IDE 而言,代碼補全、重構(gòu)是重要的功能洋满,然而如果沒有底層的支持晶乔,只使用 tags 分析或是正則表達(dá)式匹配是很難達(dá)成的。

GCC 優(yōu)勢

  • 支持 JAVA/ADA/FORTRAN
  • GCC 支持更多平臺
  • GCC 更流行芦岂,廣泛使用瘪弓,支持完備
  • GCC 基于 C,不需要 C++ 編譯器即可編譯

make

make工具相當(dāng)于一個智能的批處理工具禽最,本身沒有編譯和鏈接的功能腺怯,而是用類似于批處理的方式通過調(diào)用makefile文件中用戶指定的命令來進(jìn)行編譯和鏈接。
**而makefile又是什么? **

它里面記錄了用戶將要執(zhí)行的一系列命令川无,make根據(jù)makefile中的命令對相應(yīng)的源文件進(jìn)行編譯和鏈接的呛占。

makefile中可能就有類似的一下命令:gcc -o test.c。
makefile文件在github源碼安裝程序中很常見懦趋,你下載了一個源碼包晾虑,通常在readme中會有這樣的一句:

$ make all
$ make install # root required

make all即編譯所有,當(dāng)然這個源碼包中必須有makefile文件才行仅叫,執(zhí)行make all這個命令后make會根據(jù)makefile中的命令進(jìn)行編譯帜篇。當(dāng)然這個是“別人家”的源碼包,這個通常都給你寫好了诫咱,但是如果你自己要編譯很多源文件的時候笙隙,也是要自己寫嗎?

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坎缭,一起剝皮案震驚了整個濱河市竟痰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掏呼,老刑警劉巖坏快,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異憎夷,居然都是意外死亡莽鸿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門拾给,熙熙樓的掌柜王于貴愁眉苦臉地迎上來富拗,“玉大人,你說我怎么就攤上這事鸣戴。” “怎么了粘拾?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵窄锅,是天一觀的道長。 經(jīng)常有香客問我,道長入偷,這世上最難降的妖魔是什么追驴? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮疏之,結(jié)果婚禮上殿雪,老公的妹妹穿的比我還像新娘。我一直安慰自己锋爪,他們只是感情好丙曙,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著其骄,像睡著了一般亏镰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拯爽,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天索抓,我揣著相機(jī)與錄音,去河邊找鬼毯炮。 笑死逼肯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的桃煎。 我是一名探鬼主播篮幢,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼备禀!你這毒婦竟也來了洲拇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤曲尸,失蹤者是張志新(化名)和其女友劉穎赋续,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體另患,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡纽乱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了昆箕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸦列。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鹏倘,靈堂內(nèi)的尸體忽然破棺而出薯嗤,到底是詐尸還是另有隱情,我是刑警寧澤纤泵,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布骆姐,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏玻褪。R本人自食惡果不足惜肉渴,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望带射。 院中可真熱鬧同规,春花似錦、人聲如沸窟社。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桥爽。三九已至朱灿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钠四,已是汗流浹背盗扒。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留缀去,地道東北人侣灶。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像缕碎,于是被迫代替她去往敵國和親褥影。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容