如何为Xcode项目指定其他clang选项?

时间:2013-11-21 09:04:14

标签: ios xcode plugins compiler-construction clang

我在this tutorial的帮助下创建了自定义clang插件 我想在我的Xcode iOS项目上自动运行它。

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

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

我想保存Xcode生成的所有其他命令,因为很难为每个Xcode项目创建和传递这些命令。这就是我选择使用clang插件但不使用clang工具的原因。

我该怎样做到这一点?

或者如何提取xcode生成的编译器标志,以便在clang工具中使用它们? (因为,为了正确使用工具,我需要指定所有包含目录,所有来源和所有框架)

更新:

我在Project

中添加了很多命令
  

设置 - >构建阶段 - >编译源(双击源)

, 但是在编译时出现错误(插件是来自clang源的标准示例libPrintFunctionNames.dylib):

  

错误:无法加载插件   '/Users/...llvm/Debug+Asserts/lib/libPrintFunctionNames.dylib':   “dlopen的(/用户/.../ LLVM /调试+断言/ LIB / libPrintFunctionNames.dylib,   9):未找到符号:   __ZN5clang11ASTConsumer21HandleInterestingDeclENS_12DeclGroupRefE参考自:   /Users/.../llvm/Debug+Asserts/lib/libPrintFunctionNames.dylib   预计在:平面命名空间中   /Users/.../llvm/Debug+Asserts/lib/libPrintFunctionNames.dylib”   命令/应用程序/ Xcode   2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang   退出代码1失败

我尝试使用libPrintFunctionNames.a代替libPrintFunctionNames.dylib,但它无济于事。

也许原因是我在llvm和clang的独立源文件上构建了我的插件,在xcode中我使用了其他版本的clang。我会检查一下。

1 个答案:

答案 0 :(得分:5)

我会在构建选项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"
当您不想维护仅在OTHER_CFLAGS中有所不同的2个目标时,

xcodebuild很方便。

但是你是对的,看起来你真的需要链接相同的库,因为clang本身是链接的。至少我已经从http://llvm.org/releases/download.html下载了Clang + LLVM 3.3二进制文件,用下载的库构建了插件,它与来自http://llvm.org的clang一起使用,但是不能与Xcode的clang一起使用 - 我遇到以下内容错误:

error: unable to find plugin 'print-fns'

我已经创建了构建Clang插件的Xcode工作区,并展示了如何在默认的iOS应用程序中尝试使用它。您可以在https://github.com/vsapsai/ClangPluginExample

找到它