2009-10-11 71 views
38

本週包括新的Xcode 3.2.1自述說以下內容:的Xcode 3.2.1 GCC CLANG和LLVM神祕化

  • 靜態代碼分析完全Xcode的IDE中通過構建集成和分析選項在生成菜單或通過自定義生成設置
  • GCC 4.2是缺省的系統編譯器10.6 SDK
  • 可選的LLVM編譯器使用兩種不同的前包括結束 - 鐺編譯器是一個領先的分析器,它提供了顯着改進了編譯時間。爲了獲得最大的兼容性,GCC LLVM編譯器利用LLVM後端和GCC 4.2分析器。
  • 新的可選Clang-LLVM 1.0編譯器使用更快的Clang前端解析器與LLVM後端編譯器配合使用,以實現快速編譯和快速可執行代碼。儘管GCC 4.2仍然是系統默認的,但許多項目都將從這種編譯器組合中受益。 Clang-LLVM 1.0編譯器在遇到C++代碼時將回退到使用LLVM-GCC 4.2。

我們公司現有的項目是純C,Objective-C和Objective-C++,適用於桌面和iphone。有人可以總結LLVM,GCC,CLANG,CLANG-LLVM,WordFoo等的差異。人。並解釋他們是什麼,什麼時候我們應該使用每一個和什麼?能夠有更詳細的解釋鏈接會很好,但我只是在尋找一個高層次的概述。

回答

53

簡而言之:

編譯器基本上分爲兩部分。一個是前端,包含編程語言的解析器和語義分析。前端生成某種代碼的中間表示形式。然後是後端,它將前端生成的內容,優化它並最終生成彙編代碼。

  • GCC:公知的編譯器,包含各種語言和兩個前端後端許多處理器架構
  • LLVM:一組用於各種架構後端(和其他低級別的東西)的
  • clang:C,Objective-C和C++的新前端;使用LLVM後端。您將從編譯器中獲得更多可讀的錯誤和警告,並縮短編譯時間。您可能還會遇到不兼容或錯誤;鏗鏘是一個非常年輕的項目。
  • LLVM-GCC:GCC的前端LLVM的後端。 LLVM的後端比GCC更快。

clang's(Objective-)C++支持遠未完成,所以它在遇到C++源文件時調用llvm-gcc。它還包含現在集成到Xcode中的靜態分析器。有些人說LLVM的後端比GCC的產生更好的代碼,但你的里程可能會有所不同。 LLVM還支持鏈接時優化(您可以在Xcode的項目設置中啓用)。他們可以生成更快的代碼。

蘋果希望在未來取代GCC,因爲他們有針對GPLv3許可代碼的政策(GCC 4.2是GPLv2許可的最後一個版本)。

+0

是的,鐺甚至顯示錯誤的列,不僅是行。 – 2010-12-20 15:20:57

+0

真棒回答:當我在Xcode *中編碼並且出現*黃色*警告時,那個叮噹聲?如果我得到*紅色*錯誤是什麼?如果我在運行後發現錯誤,例如在* runtime *中,是那個給我錯誤的LLVM? – Honey 2016-04-13 21:33:57