带有ccache的Xcode地址消毒剂

带有ccache的Xcode地址消毒剂,xcode,xcode8,address-sanitizer,ccache,Xcode,Xcode8,Address Sanitizer,Ccache,我试图在Xcode中使用地址消毒器,但我也在使用ccache来加速构建。为此,我在Xcode项目级别设置了CC标志,以指向存储在~/projects/support/cmake/ccache clang的脚本。剧本是这样写的 #!/bin/sh if type -p /usr/local/bin/ccache >/dev/null 2>&1; then export CCACHE_CPP2=true exec /usr/local/bin/ccache "${DEVE

我试图在Xcode中使用地址消毒器,但我也在使用ccache来加速构建。为此,我在Xcode项目级别设置了
CC
标志,以指向存储在
~/projects/support/cmake/ccache clang
的脚本。剧本是这样写的

#!/bin/sh
if type -p /usr/local/bin/ccache >/dev/null 2>&1; then
  export CCACHE_CPP2=true
  exec /usr/local/bin/ccache "${DEVELOPER_DIR}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" "$@"
else
  exec "${DEVELOPER_DIR}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" "$@"
fi
因此达到了预期的效果(如果安装在开发人员的系统上,则使用ccache)。这很有效

现在,当我们为一个给定的方案打开地址消毒剂时,问题就来了。生成成功完成,但在尝试运行时,我们最终看到此错误:

Error: Check dependencies

Could not determine version of clang to find its Address Sanitizer library: ~/projects/support/cmake/ccache-clang
也许这是由于Xcode中的一些黑客实现,它试图解析编译器的路径以确定版本

想知道如何修改我的脚本以允许地址消毒剂工作。当前的解决方法是在我们需要进行消毒液工作时删除覆盖的
CC
标志


使用Xcode 8.3.1直接链接Asan库,而不是选中方案中的复选框

链接器和编译器标志应包含以下内容

-fsanitize=address -fno-omit-frame-pointer
如果找不到库,请找到asan动态库的路径,该库通常位于

${CMAKE_LINKER}/../../lib/clang/version/lib/darwin/libclang_rt.asan_osx_dynamic.dylib
并将其添加到链接器标志