2013-11-21 32 views
6

我在this tutorial 的幫助下創建了我的自定義clang插件,我想在我的Xcode iOS項目中自動運行它。如何爲Xcode項目指定其他clang選項?

我需要以下附加命令上clang運行,

-Xclang -load \ 
-Xclang ~/static_analysis/llvm/Debug+Asserts/lib/libPluginExample.so \ 
-Xclang -plugin -Xclang -example-plugin \ 

我想節省Xcode中產生的其他所有的命令,因爲它是難以創造和傳遞這些命令對每個Xcode項目。這就是爲什麼我選擇使用clang插件而不是clang工具的原因。

我該怎麼做到這一點?

或者我怎樣才能提取由xcode生成的編譯器標誌,在叮噹聲工具中使用它們? (becouse,正確使用工具,我需要指定所有include目錄和所有來源,所有的框架)

更新:在項目

Settings -> Build Phases -> Compile Sources (double click on source)

我加入了古都的命令, 但在編譯時出現錯誤(插件是來自叮聲源的標準示例libPrintFunctionNames.dylib):

error: unable to load plugin '/Users/...llvm/Debug+Asserts/lib/libPrintFunctionNames.dylib': 'dlopen(/Users/.../llvm/Debug+Asserts/lib/libPrintFunctionNames.dylib, 9): Symbol not found: __ZN5clang11ASTConsumer21HandleInterestingDeclENS_12DeclGroupRefE Referenced from: /Users/.../llvm/Debug+Asserts/lib/libPrintFunctionNames.dylib Expected in: flat namespace in /Users/.../llvm/Debug+Asserts/lib/libPrintFunctionNames.dylib' Command /Applications/Xcode 2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 1

我試圖用libPrintFunctionNames.a而不是libPrintFunctionNames.dylib,但它沒有幫助。

也許原因是我建立了我的插件在分開的llvm和clang源文件上,而在xcode中我使用了其他版本的clang。我會檢查。

回答

4

我會在構建選項OTHER_CFLAGS中指定其他Clang選項。您可以在

target/project Build Settings -> Apple LLVM 5.0 - Custom Compiler Flags -> Other C Flags 

這樣做也可以爲xcodebuild指定OTHER_CFLAGS,例如,

xcodebuild -scheme SampleProject build OTHER_CFLAGS="-Xclang -load -Xclang /path/to/libPrintFunctionNames.dylib -Xclang -plugin -Xclang print-fns" 

xcodebuild很方便,當你不想保持2個目標差別僅在於OTHER_CFLAGS。

但是你是對的,它看起來像你真的需要鏈接到相同的庫,因爲clang本身是鏈接的。至少我從http://llvm.org/releases/download.html下載鏘+ LLVM 3.3二進制文件,內置有下載庫插件,並用鏗鏘的作品從http://llvm.org,但不與鐺從Xcode的工作 - 我遇到以下錯誤:

error: unable to find plugin 'print-fns' 

我已經創建了Xcode工作區,它構建了Clang插件,並展示瞭如何使用默認的iOS應用程序來使用它。你可以在https://github.com/vsapsai/ClangPluginExample

+0

我遇到了同樣的問題,但設法通過小的Xcode黑客解決。 http://railsware.com/blog/2014/02/28/creation-and-using-clang-plugin-with-xcode/ 下面是關於如何使它與Xcode一起工作的更詳細的解釋。 – AlexDenisov

+0

好點,@AlexDenisov。另一種強制Xcode使用自定義編譯器的方法是通過xcodebuild。這個命令看起來像xcodebuild [..some arguments ..] CC =/path/to/custom/clang CXX =/path/to/custom/clang –

相關問題