這邊不筆記一下不行,人老了沒辦法記這麼詳細了,發揮打遊戲查攻略的精神搜尋資料和嘗試錯誤!! 這也太難,光是編譯就可以讓一堆人打退堂鼓了…
我就是想在 win7 + mingw 環境下用 clang ! 官網都不提供只好自己來編譯了。
Requirement: 確定都有寫進 system path
- mingw32 或 mingw32-w64
- cmake
- python 2 或 python 3 都可以
- 我的 OS: windows 7 64-bit,有人則是在 linux 系統中編譯 cross-platform target 比較好設定,網路上的步驟也幾乎都是 linux 系統指令
Downloads: 一堆 source code 還要放在特定的結構目錄下才能正常編譯
- LLVM source code: 重新命名資料夾 llvm
- Clang source code: 重新命名資料夾為 clang,放在 llvm/tools/
- clang-tools-extra source code: (optional) 重新命名資料夾為 extra,放在 llvm/tools/clang/tools/, 這樣才有些其他 clang tool. eg. AST matcher
- compiler-rt source code: (optional) 重新命名資料夾為 compiler-rt,放在資料夾 llvm/projects/
- 其他 source code 幾乎都是放在 llvm/projects/ 目錄下
Steps
- 執行 cmake-gui,設定好 source & build path
- 執行 configure,選 mingw build
- 找到 CMAKE_BUILD_TYPE,輸入值 Release 或 MinSizeRel,才可以編譯比較小的 LLVM,否則 lib大小很驚人
- 執行 generate,確定沒有錯誤訊息
- cmd 進入 build 目錄下,執行 mingw32-make 編譯
- 同目錄執行 mingw32-make install 完成 install目錄 (官方文件提示要先 mingw32-make check-all,但 win7 環境下都失敗不管它了)
- lib 目錄下要 include 的東西太多可以 archive 起來,之後要引入 linker 比較方便,這裡範例使用 thin archive,只打包檔名,並非真的打包所有 *.a。在 llvm/lib/ 目錄下輸入
ar -rcT libclang.a *.a - 以後要 link clang 只要 link libclang.a 即可。若使用官網提供 VC++ 編譯好的 binary,則是可以在 link time 時將 libclang.lib 當成 object file 來 link 。
這樣編譯好的 clang.exe 基本上還是使用 mingw 的 standard library,需要 mingw 的 runtime 才能執行,使用 clang.exe 前確保 mingw 有設定進 system path
