一、開發(fā)準備
1、MacOS一般默認都有Xcode,Git和Ruby
2、下載OCLint代碼

下載到本地的目錄如下:

3、cd進入oclint-scripts文件加,執(zhí)行./make
如果沒有報錯的話,大約30分鐘后編譯完成,大概過程是下載LLVM、clang的源代碼,編譯LLVM、clang與OCLint的默認規(guī)則。

不過一般都會遇到一些問題:
(1)、如果沒有安裝cmake一般都會報錯
cmake官網(wǎng),下載Mac操作系統(tǒng)對應的安裝包。安裝完成之后,運行cmake圖形界面程序,在左上角的選項欄中選擇Tools,點擊How to install for Command Line Use。
之后彈出來一個消息框:
One may add CMake to the PATH:
PATH="/Applications/CMake.app/Contents/bin":"$PATH"
Or, to install symlinks to '/usr/local/bin', run:
sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install
Or, to install symlinks to another directory, run:
sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install=/path/to/bin
三種安裝cmake command line tool 的方法,即終端能夠識別cmake命令的方法。復制sudo"/Applications/CMake.app/Contents/bin/cmake-gui" --install 命令到終端,然后運行,當然你也可以打出來。 之后再在終端打cmake命令,就不會再提示什么command not found之類的錯誤了,到此安裝成功了。
在Mac安裝cmake command line tool
cmake :command not found解決
(2)、報錯fatal error: 'openssl/ssl.h' file not found
brew install openssl
參考文章:
fatal error: openssl/ssl.h 安裝失敗 解決方案
參考2
(3)、報錯ninja not found
brew install ninja
CMake + Ninja OSX issue
(4)、make錯誤-fatal: 遠端意外掛斷了
正克隆到 'oclint-json-compilation-database'...
remote: Enumerating objects: 88, done.
error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
fatal: 遠端意外掛斷了
fatal: early EOF
fatal: unpack-objects 失敗
直接重新執(zhí)行./make就行
(5)、報錯 Operation timed out
A llvm/unittests/IR/CFGBuilder.h
A llvm/unittests/IR/DominatorTreeTest.cpp
svn: E000060: Operation timed out
或者:
svn: E175012: Connection timed out
執(zhí)行命令open ~/.subversion/config
設置 # busy-timeout = 1000000 默認值是10000毫秒也就是10秒,改成10,000,000,或者更大的數(shù)字。
### Set the SQLite busy timeout in milliseconds: the maximum time
### the client waits to get access to the SQLite database before
### returning an error. The default is 10000, i.e. 10 seconds.
### Longer values may be useful when exclusive locking is enabled.
# busy-timeout = 1000000
執(zhí)行命令open ~/.subversion/servers
設置# http-timeout = 1800或者更大的數(shù)字比如一天86400秒
./make執(zhí)行成功的畫面:
[14/14] Linking CXX executable bin/oclint-0.14

如果改了這兩個參數(shù)還是失敗,建議多試幾次,有可能是網(wǎng)絡不好。
4、創(chuàng)建自定義的規(guī)則
在oclint-scripts目錄下OCLint提供了一個叫scaffoldRule的腳本程序。可以傳入要生成的規(guī)則名,級別,類型,腳本就會在目錄oclint-rules/rules/custom/自動生成一個模板代碼,并且加入編譯路徑中。
舉個例子:

# 生成一個名為myDemoRule類型是ASTVisitor的規(guī)則模板
oclint-scripts/scaffoldRule myDemoRule -t ASTVisitor
執(zhí)行命令后:

5、編譯自定義的規(guī)則成動態(tài)庫
編譯方法1:重新執(zhí)行oclint-scripts/make
這個太慢了,不推薦,很不方便。
編譯方法2:將規(guī)則相關(guān)的內(nèi)容整合成一個Xcode工程
將規(guī)則相關(guān)的內(nèi)容整合成一個Xcode工程,并且我們的每個規(guī)則都是一個scheme,編譯時可以只選擇編譯那個選擇的規(guī)則生成對應的dylib。
OCLint工程使用CMakeLists的方式維護各個文件的依賴關(guān)系,可以使用CMake自帶的功能將這些CMakeLists生成一個xcodeproj工程文件。
在OCLint源碼目錄下建立一個文件夾oclint-xcodeproject
xcode-debug.sh
#! /bin/sh -e
cmake -G Xcode -D CMAKE_CXX_COMPILER=../build/llvm-install/bin/clang++ -D CMAKE_C_COMPILER=../build/llvm-install/bin/clang -D OCLINT_BUILD_DIR=../build/oclint-core -D OCLINT_SOURCE_DIR=../oclint-core -D OCLINT_METRICS_SOURCE_DIR=../oclint-metrics -D OCLINT_METRICS_BUILD_DIR=../build/oclint-metrics -D LLVM_ROOT=../build/llvm-install/ ../oclint-rules
執(zhí)行命令
bash xcode-debug.sh


編譯出來的動態(tài)庫


然后將編譯好的動態(tài)庫放到oclint的規(guī)則文件夾,這樣就可以使用自己新加的自定義規(guī)則了
路徑:/usr/local/Cellar/oclint/0.13/lib/oclint/rules

參考文章
OCLint 如何自定義規(guī)則