MinGW-W64 編譯 LLVM 與 Clang
最近準備用C改一些東西,準備嘗試一下LLVM和Clang,正好寫一下它的編譯。
編譯環境
由於在個人電腦上編譯,為了不影響我那幾個RPG和時常掛著卻一直沒動靜的QQ,還是暫定用Windows系統編譯。由於個人習慣(主要是懶),實在不想裝 Visual Studio 那樣的巨無霸,乾脆直接用MinGW,直接複製貼上。資源不太好找,下了好幾次才下載下來。我放到了我的CSDN資源裡面,地址:MinGW-W64下載
把我現在的編譯環境整理一下:
- 系統:Windows 7 64位
- 編譯器:MinGW-W64-builds-4.2.0
- CMake:CMake 3.5.2
MinGW 下載下來後需在環境變數的PATH里加一下。CMake如果是ZIP的話最好也加到PATH裡,方便使用。配置方法不難,不再詳談。
LLVM原始碼下載
.tar.xz檔案用WinRAR或者什麼其他壓縮軟體解壓即可,WinRAR比較舊的版本解壓不了,升級一下就可以了。
編譯過程
開啟cmd,cd到解壓後的目錄。執行 mkdir build,新建一個build資料夾,這樣是為了防止編譯內容和原始碼混亂,以後方便維護。
E:\SourceCode\llvm\llvm-3.8.0.src>mkdir build E:\SourceCode\llvm\llvm-3.8
用CMake處理
E:\SourceCode\llvm\llvm-3.8.0.src\build>cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=D:\LLVM -DCMAKE_MAKE_PROGRAM=mingw32-make.exe ..
為了方便說明,我把引數拆開,實際用的時候寫一行就行了。
G為要生成的格式,用MinGW,這裡大小寫必須寫對,寫錯的話會有提示。
CMAKE_BUILD_TYPE為構建型別,可以寫Debug,Release,MinSizeRel。
CMAKE_INSTALL_PREFIX為install路徑,一般這裡路徑最好保守一些,儘量不要用中文或空格。
CMAKE_MAKE_PROGRAM這裡寫不寫都可以,如果用Ninja編譯的話,這裡就必須寫了。
最後的兩點指的是上層路徑,按CMake文件,應該寫在前面,實際寫到後面好像也沒什麼。編譯LLVM。前面的幾步執行的還算快,make就是挑戰耐性的時刻了,MinGW用的是mingw32-make,這裡很簡單,但是是最耗時的,休息一下。這裡完成以後,install一下,就能放到CMake設定裡的位置了
E:\SourceCode\llvm\llvm-3.8.0.src\build>mingw32-make ……wait…… E:\SourceCode\llvm\llvm-3.8.0.src\build>mingw32-make install
配置編譯Clang,步驟和編譯LLVM差不多,不細說了,直接上引數
E:\SourceCode\llvm\cfe-3.8.0.src>cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=D:\LLVM .. E:\SourceCode\llvm\cfe-3.8.0.src\build>mingw32-make E:\SourceCode\llvm\cfe-3.8.0.src\build>mingw32-make install
最後不要忘了把編譯輸出的路徑加到Path裡面
測試
開啟cmd,輸入 clang -v 輸出版本
C:\Users\wjh>clang -v
clang version 3.8.0 (tags/RELEASE_380/final)
Target: x86_64-w64-windows-gnu
Thread model: posix
InstalledDir: D:\LLVM\bin
下面用程式測試 test.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
編譯
E:\test>clang++ -o test.exe test.cpp
執行
E:\test>test.exe
Hello World!
編譯問題或其他
- libcxx和libcxxabi在Windows上編譯總有問題,沒成功,以後再試,如果有編譯成功的望指教。
- 太窮,買不起Mac,有時間還是在Linux上試試,移植的東西肯定沒原裝的用著順。