【Clang/LLVM入门系列】如何让 Xcode 使用自定义 Clang 及其插件

1,571 阅读1分钟

问题场景

在使用libTooling接口实现了一个clang plugin后,我们可能需要将它集成到Xcode工程中,让Xcode使用我们定制版本的Clang,并且在编译时加载我们新写的plugin

本文具体讲一下需要配置的Xcode工程细节。

具体配置(.xcconfig文件)

1. 定义环境变量

  • CC=[MY_CLANG_PATH]/bin/clang

    Xcode用的编译器重定向到本机上定制版本的clang路径

  • OTHER_CFLAGS=$(OTHER_CFLAGS) -Xclang -load -Xclang [MY_PLUGIN_PATH]/MyPlugin.dylib -Xclang -add-plugin -Xclang my-plugin

    • 注:应该使用-add-plugin,而不要使用-plugin,后者会导致只跑plugin的逻辑,不跑原逻辑

2. 关闭COMPILER_INDEX_STORE_ENABLE

  • COMPILER_INDEX_STORE_ENABLE=NO

    • 等价于在Xcode工程配置中的Enable Index-While-Building Functionality设为NO

    其实就是去掉clang编译选项中的-index-store-path, 因为Xcode带的clang支持-index-store-path选项,但开源的clang还没有支持。所以开源的clang在运行时会直接忽略掉-index-store-path,但其参数是一个目录不会被忽略,会造成clang的误判报错[1]

注:这些环境变量和配置也可以在Xcode工程中直接添加、设置,但为了配置方便切换和管理,建议使用.xcconfig文件。

Xcode工程scheme导出.xcconfig文件:xcodebuild -workspace ./MyProject.xcworkspace -scheme MyProject -showBuildSettings

参考资料

[1] stackoverflow.com/questions/4…