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