天天看點

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

計算機科學叢書 點選檢視第二章 點選檢視第三章

LLVM編譯器實戰教程

Getting Started with LLVM Core Libraries

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

[巴西] 布魯諾·卡多索·洛佩斯(Bruno Cardoso Lopes) 著

拉斐爾·奧勒(Rafael Auler)

過敏意 冷靜文 譯

第1章 建構和安裝LLVM

LLVM基礎架構适用于多種Unix環境(GNU/Linux、FreeBSD、Mac OS X)和Windows環境。在本章中,我們将逐漸介紹在所有這些系統中使用LLVM之前的必要準備步驟。在部分系統上有相應的LLVM和Clang預建構軟體包,但也可以從源代碼編譯它們。

LLVM初學者必須考慮以下情況:基于LLVM編譯器的基本設定均包括LLVM和Clang庫及工具包。是以,本章中的所有操作說明均針對建構和安裝兩個方面。在本書中,我們将重點介紹LLVM 3.4版本。然而,需要注意的是,LLVM正在積極發展,是一個年輕的項目,是以,它很可能會有一些變更。

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

本章将介紹以下主題:

  • 了解LLVM版本
  • 使用預建構的二進制檔案安裝LLVM
  • 使用包管理器安裝LLVM
  • 從源代碼建構用于Linux的LLVM
  • 從源代碼建構用于Windows和Visual Studio的LLVM
  • 從源代碼建構用于Mac OS X和Xcode的LLVM

1.1 了解LLVM版本

得益于許多程式員的貢獻,LLVM項目得以快速更新。從10年前的第一次釋出到版本3.4,其SVN(即Subversion,這是一個用于開源代碼的版本控制系統)存儲庫包含了超過20萬次送出。僅在2013年,該項目就有近3萬次新的送出。是以,新功能不斷被引入,有些功能也迅速被淘汰。正如任何大型項目一樣,開發人員有着較短的開發周期,需要在項目運作良好并通過各種測試時釋出穩定的檢查點,進而允許使用者在使用經過良好測試的版本的同時,體驗最新的功能。

LLVM項目在整個發展曆史上采用了每年釋出兩個穩定版本的政策。每次更新都将次要版本号增加1。例如,從版本3.3到版本3.4的更新是次要版本更新。一旦次要号碼達到9,下一個版本會将主版本号增加1,就像LLVM 2.9之後更新的LLVM 3.0。與其前任版本相比,主要修訂版本的更新不一定會産生很大的變化。但與上一個主要版本相比,這個主要版本的更新一般代表近5年來編譯器的發展過程。

依賴于LLVM的項目通常使用其trunk(主幹)版本,即SVN存儲庫中最新可用的版本,然而使用這個版本的代價在于這個版本可能不穩定。最近,從版本3.4開始,LLVM社群緻力于修正釋出,引入新的修訂版本号。這項工作的第一個産品是LLVM 3.4.1。修正釋出的目的是将主幹分支修複的更新檔包不添加任何新特性地移植到最新版本,進而保持完整的相容性。修正釋出應該出現在上一次釋出的3個月之後。由于這個新系統還處于起步階段,本章将重點介紹LLVM 3.4的安裝。LLVM 3.4的預建構軟體包數量較大,但隻要遵循我們的操作說明,就應該能夠順利地建構LLVM 3.4.1或任何其他版本。

1.2 擷取預建構包

為了使在你的系統上安裝軟體的任務變得容易,LLVM貢獻者為特定平台準備了預編譯的二進制檔案,你可以不用自己編譯。在某些情況下,編譯一個軟體可能很棘手,它可能需要一些時間,并且隻有你在使用不同的平台或積極地從事項目開發工作時才需要。是以,如果你想要快速入門LLVM,可以使用預建構軟體包。但是在本書中,我們将鼓勵你直接從LLVM源代碼樹入手,你應該準備好自己從源代碼樹編譯LLVM。

擷取LLVM的預建構包的方法有兩種:可以通過官方網站擷取已釋出的二進制檔案的軟體包,也可以從第三方GNU/Linux發行版和Windows安裝程式擷取。

1.2.1 擷取官方預建構二進制檔案

對于版本3.4,可從LLVM官網下載下傳針對以下系統的預建構軟體包:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

通過通路

http://www.llvm.org/releases/download.html

,并檢視與想要下載下傳的版本相關的“Pre-built Binaries”部分,可以檢視不同版本的所有選項。例如,要在Ubuntu 13.10上下載下傳并執行系統範圍的LLVM安裝,需要擷取該檔案的URL,并使用以下指令:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

至此,LLVM和Clang就可以使用了。請記住,你需要永久地更新系統的PATH環境變量,因為我們在最後一行所做的更新僅對目前shell會話有效。你可以使用簡單的指令執行Clang來測試安裝是否成功,比如列印你剛剛安裝的Clang版本:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

如果在運作Clang時遇到問題,請嘗試直接從安裝位置運作二進制代碼,以確定你沒有遇到PATH變量錯誤配置的問題。如果問題還沒有解決,則你下載下傳的預建構檔案可能與你的系統環境不相容。請記住,在編譯時二進制檔案需要與特定版本的動态庫連結。如果運作應用程式時出現連結錯誤,就說明你下載下傳的預建構二進制檔案與系統不相容。

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

如果要在除Windows以外的其他系統中安裝預建構的軟體包,可以遵循相同的步驟。針對Windows的預建構軟體包提供了一個易于使用的安裝程式,它可以在Program Files檔案夾的子檔案夾中建立LLVM樹結構。安裝程式還提供了自動更新PATH環境變量的選項,使你能在任何指令提示符視窗中運作Clang可執行檔案。

1.2.2 使用軟體包管理器

軟體包管理器應用程式可用于各種系統,也是擷取和安裝LLVM/Clang二進制檔案的簡單方法。對于大多數使用者來說,這通常是安裝LLVM和Clang的首選方法,因為它會自動處理依賴關系的問題,并確定你的系統與所安裝的二進制檔案相容。

例如,在Ubuntu(10.04及更高版本)中,應該使用以下指令:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

在Fedora 18中,使用類似的指令行,但包管理器不同:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

使用快照包更新

也可以從每日建構的源代碼快照建構軟體包,這類快照包含來自LLVM子版本控制庫的最新修改(commit)。這些快照很有用,尤其是對于LLVM開發人員和希望測試早期版本的使用者,以及希望以主流開發成果使本地項目保持最新的第三方使用者。

Linux

通過Debian和Ubuntu Linux(i386和amd64)軟體庫,可以從LLVM 版本控制庫中下載下傳每日編譯的快照。你可以在

http://llvm.org/apt

檢視更多詳細資訊。例如,要在Ubuntu 13.10上安裝LLVM和Clang的每日發行版,請使用以下指令序列:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

Windows

特定LLVM/Clang快照的Windows安裝程式可從

http://llvm.org/builds/

的“Windows snapshot builds”部分下載下傳。最終的LLVM/Clang工具預設安裝于C:ProgramFilesLLVMbin(該位置可能會根據發行版本而有所變化)。請注意,有一個單獨的Clang驅動程式可模仿Visual C++ 中的cl.exe,名為clang-cl.exe。如果你打算使用經典的GCC相容驅動程式,請使用clang.exe。

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

1.3 從源代碼建構

在沒有預建構的二進制檔案的情況下,可以先擷取源代碼,然後從頭建構LLVM和Clang。從源代碼建構能夠更好地了解LLVM結構。此外,你可以微調配置參數,以擷取定制的編譯器。

1.3.1 系統要求

若要檢視支援LLVM的平台的更新清單,可以通路

http://llvm.org/docs/

GettingStarted.html#hardware 。另外,

http://llvm.org/docs/GettingStarted

.

html#software列出了一系列更新的編譯LLVM軟體的先決條件。例如,在Ubuntu系統中,可以使用以下指令解決軟體依賴關系:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

如果正在使用包含過時軟體包的舊版Linux發行版,請盡量更新系統。LLVM源代碼對用于執行建構的C++編譯器非常苛刻,如果依賴舊的C++編譯器,可能導緻建構失敗。

1.3.2 擷取源代碼

LLVM源代碼以BSD風格的許可證進行分發,可以從官網或SVN存儲庫中下載下傳。如果要下載下傳3.4版本的源代碼,可以通路網站

http://llvm.org/releases/download.html#3.4

,或按如下步驟直接下載下傳并準備用于編譯的源代碼。請注意,你總是需要Clang和LLVM,但是clang-tools-extra包是可選的。不過如果你打算練習在第10章中的教程,那麼你将需要使用該包。有關建構其他項目的資訊,請參閱下一章。請使用以下指令下載下傳并安裝LLVM、Clang和Clang Extra Tools:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM
帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

1.3.2.1 SVN

要直接從SVN存儲庫中擷取源代碼,請確定你的系統上安裝了SVN軟體包。下一步,你需要決定是使用存儲庫中的最新版本,還是穩定版本。如果想要最新版本(在trunk中),假設你已進入想要放置源代碼的目标檔案夾中,則可以使用以下指令序列:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

如果要使用穩定版本(例如版本3.4),請在所有指令中将trunk/替換為tags/RELEASE_34/final。你可能還希望輕松地浏覽LLVM SVN存儲庫,以檢視送出曆史記錄、日志和源碼樹,要這樣做,可以通路

http://llvm.org/viewvc

1.3.2.2 Git

你還可以從與SVN同步的Git鏡像存儲庫中擷取源代碼:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

1.3.3 建構和安裝LLVM

下面将解釋建構和安裝LLVM的各種方法。

1.3.3.1 使用由自動工具生成的配置腳本

建構LLVM的标準方法是使用通過GNU自動工具建立的配置腳本,來生成針對特定平台的Makefile檔案。該建構系統支援不同的配置選項,被廣泛采用。

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

請花點時間使用以下指令看一看可能的選項:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

部分解釋如下:

  • --enable-optimized:此選項允許我們在關閉調試支援和啟用優化的情況下編譯LLVM/Clang。預設情況下,此選項已關閉。如果你使用LLVM庫進行開發,則建議使用調試支援并禁用優化,但是,由于缺少優化會使LLVM性能明顯下降,是以應該在部署時舍棄這種配置。
  • --enable-assertions:此選項在代碼中啟用斷言。在開發LLVM核心庫時,此選項非常有用。預設情況下打開。
  • --enable-shared:此選項允許我們将LLVM/Clang庫建構為共享庫,并将LLVM工具與它們進行連結。如果打算在LLVM建構系統之外開發一個工具,并希望動态連結到LLVM庫,那麼應該将其打開。此選項預設情況下關閉。
  • --enable-jit:此選項為支援它的所有目标啟用即時編譯。預設情況下打開。
  • --prefix:此選項指定LLVM/Clang工具和庫的安裝目錄的路徑。例如,如果設定為--prefix =/usr/local/llvm,将在/usr/local/llvm/bin中安裝二進制檔案,并在/usr/local/llvm/lib中安裝庫檔案。
  • --enable-targets:此選項允許我們選擇編譯器輸出代碼的目标集。值得一提的是,LLVM能夠執行交叉編譯,也就是可以編譯在其他平台(如ARM、MIPS等)上運作的程式。此選項定義要在代碼生成庫中包含哪些後端。預設情況下,所有目标都會被編譯,但你可以通過指定你需要的目标來節省編譯時間。
帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

在使用相應參數運作configure後,還需要使用經典的make和make install兩個指令完成建構。接下來我們給你展示一個例子。

使用Unix建構和配置LLVM

在這個例子中,我們将使用一系列指令建構一個未優化(即調試模式下)的LLVM/Clang,該方法适合于任何基于Unix的系統或Cygwin。不同于之前的例子中那樣安裝在/usr/local/llvm目錄下,我們将在主目錄下建構并安裝它,以解釋如何在沒有root權限的情況下安裝LLVM。這是作為開發人員工作時的慣例。這樣,你還可以維護已安裝的多個版本。如果需要,可以将安裝檔案夾更改為/usr/local/llvm,進而進行系統範圍的安裝。隻需記住在建立安裝目錄時使用sudo,并運作make install指令。要使用的指令序列如下:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

在本節中,我們将建立一個單獨的目錄來儲存對象檔案(即中間建構副産品),不要将它建構在用于儲存源檔案的同一檔案夾中。請使用以下指令及上一節中介紹過的選項:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

編譯和安裝所有元件需要一些時間。請注意,建構腳本還将處理你下載下傳并放入LLVM源代碼樹的其他存儲庫。沒有必要單獨配置Clang或Clang其他工具。

要檢查建構是否成功,可以使用echo $? shell指令。$? shell變量傳回在shell會話中運作的最後一個程序的退出代碼,而echo指令将其列印到螢幕。是以,在make指令之後要立即運作此指令,這一點很重要。如果建構成功,則make指令将始終傳回0,與成功執行完畢的任何其他程式一樣:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

你可以配置shell的PATH環境變量,以便輕松通路最近安裝的二進制檔案,并通過查詢Clang版本進行首次測試:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

1.3.3.2 使用CMake和Ninja

除了傳統的配置腳本以外,還可以為LLVM選擇另一種基于CMake的跨平台建構系統。CMake可以按與配置腳本相同的方式為你的平台生成專門的Makefile檔案,而且CMake更靈活,還可以為其他系統(如Ninja、Xcode和Visual Studio)生成建構檔案。

另一方面,Ninja是一個小而快速的建構系統,可以替代GNU Make及其相關的Makefile檔案。如果你對Ninja背後的動機和故事感興趣,請通路

http://aosabook.org/en/posa/ninja.html

。你可以将CMake配置為生成Ninja建構檔案而不是Makefile檔案,即你可以選擇是使用CMake和GNU Make,還是使用CMake和Ninja。

然而,如果使用後者,你可以在更改LLVM源代碼并重新編譯時感受到非常短的周轉時間。如果你打算在LLVM源代碼樹中開發工具或插件,并依賴于LLVM建構系統來編譯項目,則特别适合這樣做。

請確定你已安裝CMake和Ninja。例如,在Ubuntu系統中,可以使用以下指令檢驗:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

帶有CMake的LLVM還提供了許多可以定制建構的選項。有關這些選項的完整清單,請通路

http://llvm.org/docs/CMake.html

。我們先前已經介紹過基于自動工具的系統,以下是對應于該系統配置集合的選項清單。這些标志的預設值與相應的配置腳本标志的預設值相同:

  • CMAKE_BUILD_TYPE:這是一個字元串值,用于指定建構是Release還是Debug。Release建構相當于在配置腳本中使用--enable-optimized标志,而Debug建構相當于使用--disable-optimized标志。
  • CMAKE_ENABLE_ASSERTIONS:這是一個布爾值,對應于--enable-assertions配置标志。
  • BUILD_SHARED_LIBS:這是一個布爾值,對應于-enable-shared配置标志,用于确定庫是共享還是靜态。Windows平台不支援共享庫。
  • CMAKE_INSTALL_PREFIX:這是一個字元串值,對應于--prefix配置标志,用于提供安裝路徑。
  • LLVM_TARGETS_TO_BUILD:這是要建構的目标的清單,以分号分隔,大緻對應于--enable-targets配置标志中使用的逗号分隔的目标清單。

要設定任何這些參數值對,請将-DPARAMETER=value參數标志提供給cmake指令。

使用CMake和Ninja為Unix建構

我們将重複前面使用配置腳本時的相同示例,但這次使用CMake和Ninja來建構它:

首先,建立一個目錄來包含建構及安裝檔案:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

請記住,這個檔案夾不能是存放LLVM源檔案的同一個檔案夾。然後,用你選擇的一組選項啟動CMake:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

應當将/PATHTOSOURCE替換為你的LLVM源檔案夾的絕對路徑。如果想使用傳統的GNU Make檔案,可以忽略-G Ninja參數。現在,使用ninja或make(具體取決于你的選擇)完成建構。對于ninja,使用以下指令:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

對于make,使用以下指令:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

與前面一樣,可以通過簡單的指令來檢查建構是否成功。記住,一定要在最後一條建構指令之後立即使用它,因為它會傳回在目前shell會話中運作的最後一個程式的退出值:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

如果上面的指令傳回零,則操作成功。最後,請配置你的PATH環境變量,并使用你的新編譯器:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

解決建構錯誤

如果建構指令傳回非零值,則表示發生錯誤。在這種情況下,Make或Ninja會列印錯誤,使其對你可見。請重點關注提示的第一個錯誤,以找到解決方案。對于穩定的LLVM版本,常見的錯誤是你的系統使用了不滿足版本要求的軟體。最常見的問題是使用過時的編譯器。例如,使用GNU g ++版本4.4.3建構LLVM 3.4時,在成功編譯一半以上的LLVM源檔案之後,将導緻以下編譯錯誤:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

你可以更改LLVM源代碼來規避這個問題(如果你線上搜尋或者自己檢視源碼,将會發現如何執行此操作),但是,無法修補每個想要編譯的LLVM版本。更新編譯器要簡單得多,當然也是最合适的解決方案。

一般來說,在穩定版本中遇到建構錯誤時,請注意你的系統與推薦設定相比有什麼差別。請記住,穩定版本已經在幾個平台上進行了測試。另一方面,如果你正在嘗試建構一個不穩定的SVN版本,則最近的送出可能會影響針對你的系統的建構,是以恢複到之前可用的SVN版本更為簡便。

1.3.3.3 使用其他Unix方法

一些Unix系統提供的軟體包管理器可以從源檔案自動建構和安裝應用程式。它們提供了一個在你的系統上經過測試的源代碼編譯平台,并且還嘗試解決包依賴性問題。我們現在将在建構和安裝LLVM和Clang的環境中評估這些平台:

  • 對于使用MacPorts的Mac OS X,可以使用以下指令:
帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM
  • 對于使用Homebrew的Mac OS X,可以使用以下指令:
帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM
  • 對于使用ports的FreeBSD 9.1,可以使用以下指令(請注意,從FreeBSD 10開始,Clang是預設編譯器,是以它已經安裝):
帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM
  • 對于Gentoo Linux,可以使用以下指令:
    帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

1.3.4 Windows和Microsoft Visual Studio

要在Microsoft Windows上編譯LLVM和Clang,可以使用Microsoft Visual Studio 2012和Windows 8執行以下步驟:

  1. 擷取Microsoft Visual Studio 2012。
  2. http://www.cmake.org 下載下傳并安裝CMake工具的官方二進制發行版。在安裝過程中,請確定選中“Add CMake to the system PATH for all users”選項。
  3. CMake将生成Visual Studio配置和建構LLVM所需的項目檔案。首先運作cmake-gui圖形工具。然後,單擊“Browse Source…”按鈕并選擇LLVM源代碼目錄。接下來,單擊“Browse Build”按鈕,并選擇一個目錄來放置CMake生成的檔案(随後Visual Studio将使用它),如圖1-1所示。
帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM
  1. 單擊“Add Entry”并定義CMAKE_INSTALL_PREFIX以包含LLVM工具的安裝路徑,如圖1-2所示。
  2. 此外,可以使用LLVM_TARGETS_TO_BUILD定義支援的目标集,如圖1-3所示。你可以選擇添加任何其他條目,以定義我們之前讨論過的CMake參數。
帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM
  1. 單擊“Configure”按鈕。會有一個彈出視窗詢問該項目要使用的生成器和編譯器,請選擇“Use default native compilers”,對于Visual Studio 2012,請選擇“Visual Studio 11”選項。單擊“Finish”,如圖1-4所示。
帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM
  1. 配置結束後,單擊“Generate”按鈕。然後,Visual Studio解決方案檔案LLVM.sln會被寫入指定的建構目錄中。請轉到此目錄并輕按兩下此檔案,随後将在Visual Studio中打開LLVM解決方案。
  2. 若要自動建構和安裝LLVM/Clang,請在左側的樹狀視圖視窗中找到“CMakePredefinedTargets”,再右鍵單擊“INSTALL”,然後選擇“Build”選項。預定義的INSTALL目标将訓示系統建構和安裝所有LLVM/Clang工具和庫,如圖1-5所示。
帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM
  1. 要選擇性地建構和安裝特定的工具或庫,請在左側的樹清單視圖視窗中選擇相應的項目,再右鍵單擊該項目,然後選擇“Build”選項。
  2. 将LLVM二進制檔案安裝目錄添加到系統的PATH環境變量中。

在我們的例子中,安裝目錄是C:Program Files(x86)LLVMinstallbin。要直接測試安裝而不更新PATH環境變量,請在指令提示符視窗中執行以下指令:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

1.3.5 Mac OS X和Xcode

盡管可以通過使用前面描述的正常Unix指令為Mac OS X編譯LLVM,但也可以使用Xcode進行編譯:

  1. 擷取Xcode副本。
  2. 下載下傳并安裝位于 的CMake 工具的官方二進制發行版。確定選中“Add CMake to the system PATH for all users”選項。
  3. CMake能夠生成Xcode使用的項目檔案。首先運作cmake-gui圖形化工具。然後,如圖1-6所示,單擊“Browse Source”按鈕并選擇LLVM源代碼目錄。接下來,單擊“Browse Build”按鈕,然後選擇一個目錄用于存放CMake生成的檔案,這些檔案将被Xcode使用。
    帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM
  1. 單擊“Add Entry”并定義CMAKE_INSTALL_PREFIX以包含LLVM工具的安裝路徑,如圖1-7所示。
  2. 另外,可以使用LLVM_TARGETS_TO_BUILD來定義支援的目标集。可以選擇添加任何其他條目,以定義我們之前讨論的CMake參數,如圖1-8所示。
  3. Xcode不支援生成LLVM位置無關代碼(PIC)庫。單擊“Add Entry”并添加LLVM_ENABLE_PIC變量,它是BOOL類型,不要選中複選框,如圖1-9所示。
帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM
  1. 單擊“Configure”按鈕。将彈出視窗要求你指定該項目使用的生成器和編譯器。選擇“Use default native compilers”和“Xcode”。點選“Finish”按鈕結束程序,如圖1-10所示。
帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM
  1. 配置結束後,單擊“Generate”按鈕,然後LLVM.xcodeproj檔案會被寫入之前指定的建構目錄中。轉到此目錄并輕按兩下此檔案以便在Xcode中打開LLVM項目。
  2. 要建構和安裝LLVM/Clang,請選擇“install”,如圖1-11所示。
帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM
  1. 接下來,點選“Product”菜單,然後選擇“Build”選項,如圖1-12所示。
帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

在我們的示例中,安裝二進制檔案的檔案夾是/Users/Bruno/llvm/install/bin。要測試安裝,請使用安裝目錄中的clang工具,如下所示:

帶你讀《LLVM編譯器實戰教程》之一:建構和安裝LLVM第1章 建構和安裝LLVM

1.4 總結

本章詳細介紹如何通過官方建構的軟體包使用預建構的二進制檔案、第三方軟體包管理器和每天的快照來安裝LLVM和Clang。此外,還詳細介紹了如何在不同的作業系統環境中使用标準的Unix工具和IDE從源檔案建構項目。

在下一章中,我們将介紹如何安裝LLVM中其他可能對你非常有用的項目。這些外部項目通常用于實作在主LLVM SVN存儲庫之外開發并且單獨釋出的工具。

繼續閱讀