[題外話,clang在Windows下玩玩可以,千萬別用它在正式項目上。一個__declspec(dllexport/dllimport)問題,兩三年了也沒任何進展,可見windows支持多不給力]
首先,確定已經裝好了MingW和Msys shell以及Python,並且已經成功checkout llvm和clang的代碼。 另外,llvm/clang依賴於zlib,請確認zlib已在MingW下編譯並安裝。
關於MingW的版本需要注意的是x86版本的要選擇異常處理模式為dwarf的版本而不是sjlj模式,否則編譯出來的clang++是不支持異常處理的。因為clang不支持sjlj模式。至於,x64版本MingW就別搞了,因為clang也不支持seh模式。
下面是具體編譯的步驟:
1. 啟動Msys bash shell
2. 在build目錄下運行llvm的configure腳本,使用 --prefix最好指向mingw安裝目錄。這個目的是為了編譯好的clang/clang++會自動搜索gcc/g++的頭文件目錄,而不需要再用-I 來include這些路徑。但是,很多時候這招也不靈,因為很多mingw版本的頭文件組織模式和clang設想的不一樣。可以自己改clang源文件llvm\tools\clang\lib\Frontend\InitHeaderSearch.cpp適配具體的情況.
configure的其他參數可以使用 configure --help 來查看具體含義,然后根據需要設定。
3. 為了能夠在Msys shell下正常make,需要對一些相關的makefile做一些改動:
1)修改llvm source下unittests\Makefile.unittest的第23行
修改為
2)修改build目錄下生成的Makefile.config
將52 - 53行
修改為
否則windows版的GNU make就沒法解析這兩個路徑,導致相關的makefile include失敗,無法make。
另外,將184行
修改為
否則安裝時會找不到安裝腳本。這個無聊的錯誤不知道是怎么出現的,暈。
3)修改build目錄下的projects\sample\Makefile.common
將 6, 10, 13, 16行的路徑
改為
原因同上,否則makefile include會失敗。
4. 執行完上述步驟, 我們就可以在build目錄下make了
其中 -j后面的數字表示同時啟動幾個make job, 一般不要超過機器的CPU的總核數。
5. 編譯大概需要幾十分鍾不等,去喝杯茶或者干點別的。編譯完后 make install即可。