最近突然興起想看一下clang插件的內容,作為一個初學者瘋狂的搜索各個博客網站的內容,結果按各個網站的步驟嘗試下來,一直error,error。(也可能是我能力有限,看不懂大神們的操作),終于在今天編譯成功了,所以想把自己的操作詳細的記錄下來,跟博客差不多,但把博客的一些錯誤最近突然興起想看一下clang插件的內容,作為一個初學者瘋狂的搜索各個博客網站的內容,結果按各個網站的步驟嘗試下來,一直error,error。(也可能是我能力有限,看不懂大神們的操作),終于在今天編譯成功了,所以想把自己的操作詳細的記錄下來,跟博客差不多,但把博客的一些點給去掉了,也算方便后面的學習者吧。
本次學習的環境是Xcode8.3.1,其他版本的Xcode不一定保證成功
1.獲取clang源碼
從這里https://opensource.apple.com/tarballs/clang/?把相應的clang源碼下下來,最好是最新版的,目前最新版的源碼是clang-800.0.42.1。其中LLVM主要的子項目包括:
2.編譯LLVM得到相應的dylib文件
下載源碼完成后解壓目錄,接下來就是要做編譯LLVM的工作了。首先來對這些源碼生成一個Xcode工程,源碼項目的編譯是由cmake管理(關于cmake詳細資料請參考:cmake官方教程),因此生成Xcode工程非常方便。具體編譯LLVM的步驟如下:
2.然后用命令行創建文件夾MyPlugin及其里面的文件
3.向MyPlugin你新創建出來的CMakeLists.txt加入下面的代碼
4.MyPlugin你新創建出來的MyPlugin.cpp加入下面的代碼,代碼一個截圖截不下來,看后面附件吧。
5.然后cd到clang-800.0.42.1根目錄,執行下面的命令。
6.就會得到如下的LLVM Xcode工程。
7.編譯這個工程的MyPlugin,同時編譯clang源碼,看看是否可以編譯得過。
8.這時你就會在/Debug/lib得到一個MyPlugin.dylib的庫
3.通過Xcode使用相應的插件文件
1.新建一個test工程
2.在Build Settings other C Flags里面添加如下選項
-Xclang -load -Xclang /Users/yockieyang/Desktop/homeWork/llvm/llvm/clang-800.0.42.1/build/Debug/lib/MyPlugin.dylib -Xclang -add-plugin -Xclang MyPlugin -Xclang -plugin-arg-MyPlugin -Xclang $SRCROOT/..
3.如果你此時運行你相應的程序,你會發現會出現下面這樣一個錯誤。是因為你的程序用的是IOS原生默認的clang.原生默認的clang是編譯不過你的dylib庫的,必須用你上面編譯出來的clang文件編譯,可以通過在Xcode工程的buildSetting添加CC和CXX將系統默認的clang改為你自己的clang.具體添加方法如下:
4.這時你就可以編譯你的test工程了,編譯過程有點慢。但還是成功編譯了,如果你此時建立一個叫a_bc的Cocoa Class文件。由于我們這個插件的作用是檢測文件名是否按照駝峰命名法命名,如果不是會報相應的錯誤,所以你此時的程序是編譯不過的。提示信息如下:
4.隨包處理
上面的相應clang程序和dylib程序都只是在本地,而我們的程序最終要上傳到AppStore上去的,所以就不能指向本地了,我們所做的操作就是隨包處理。也很簡單,將LLVM Debug 里面的bin的所有可執行程序和lib你的dylib程序和clang文件夾一起Add到你的應用程序里面,然后build Setting重新指向正確的路徑就可以了,具體效果如下。
5.總結
以上只是教你在Xcode中怎么使用一個相應的clang插件,至于怎么調試插件程序,以及插件程序所用到的知識,代碼,接口我們在之后的文章給出來。
文章參考:http://www.lxweimin.com/p/581ef614a1c5