问题场景
在使用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…