1. 程式人生 > >MinGW-W64 編譯 LLVM 與 Clang

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比較舊的版本解壓不了,升級一下就可以了。

編譯過程

  1. 開啟cmd,cd到解壓後的目錄。執行 mkdir build,新建一個build資料夾,這樣是為了防止編譯內容和原始碼混亂,以後方便維護。

    E:\SourceCode\llvm\llvm-3.8.0.src>mkdir build
    E:\SourceCode\llvm\llvm-3.8
    .0.src>cd build E:\SourceCode\llvm\llvm-3.8.0.src\build>
  2. 用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文件,應該寫在前面,實際寫到後面好像也沒什麼。

    配置中
  3. 編譯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
  4. 配置編譯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
  5. 最後不要忘了把編譯輸出的路徑加到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

test
#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上試試,移植的東西肯定沒原裝的用著順。