iOS使用ccache没有生效的解决方法

关键词

  • exec:ccache:not found
  • ccache -s 没有ccache
  • jenkins打包,ccache没有生效
  • cachesize为空
cache hit (direct) 0
cache hit (preprocessed) 0
cache miss 0
cache hit rate 0.00 %
couldn't find the compiler 2
no input file 4
cleanups performed 0
files in cache 0
cache size 0.0 kB

解决方案

修改 ccache-clang 脚本,替换为

#!/bin/sh
export PATH=$PATH:/usr/local/bin
export CCACHE_MAXSIZE=10G
export CCACHE_CPP2=true
export CCACHE_HARDLINK=true
export CCACHE_SLOPPINESS=file_macro,time_macros,include_file_mtime,include_file_ctime,file_stat_matches

  # 指定日志文件路径到桌面,等下排查集成问题有用,集成成功后删除,否则很占磁盘空间
export CCACHE_LOGFILE=~/Desktop/CCache.log
exec ccache /usr/bin/clang "$@"

以下是分析和解决的思路


前言

这两天我们团队正在进行编译速度的优化, 参考了 [贝聊科技]如何将 iOS 项目的编译速度提高5倍的优化思路,最终选择了使用 ccache 进行优化方向进行集成。
最终在我的mac集成成功,并将启动速度提高50%以上,但是在将代码合并到master分支进行Jenkins打包的时候发现编译速度反而增加了一倍
找了很久的原因,最终发现编译的时候是走了ccache-clang脚本的,但是却进入了else分支,因此我们先来分析ccache-clang做了什么操作:

//指定这是一个bash脚本
#!/bin/sh   
/*
type -p ccache判断是否存在ccache命令
/dev/null是空设备文件
2>&1是把标准错误流重定向到标准输出流
所以整行的作用是先判断命令是否存在
如果不存在就把标准错误流重定向成标准输出流后,再重定向到空文件,这样错误就不会在控制台上打印出来了
*/
if type -p ccache >/dev/null 2>&1; then 
//设置最大的缓存  
export CCACHE_MAXSIZE=10G
/*
设置源文件的编译模式,默认是true,ccache会先处理源文件,
如果缓存没有命中,就编译源文件;
而如果是false,就会在缓存没有命中时,不是直接编译源文件,
而是编译处理后的文件,但是这可能会有问题,
因为不同的编译器,预处理后的文件内容不完全相同
*/
  export CCACHE_CPP2=true
/*
设置为true,表明ccache直接利用缓存目录下的文件,
而不是拷贝后的文件,这样可以加快编译速度,默认是false
*/
  export CCACHE_HARDLINK=true
/*
设置提高缓存命中率,忽略__FILE__、DATE、__TIME__等宏,
也不检查文件的修改和创建时间是否是最新的等等
*/
  export CCACHE_SLOPPINESS=file_macro,time_macros,include_file_mtime,include_file_ctime,file_stat_matches

//指定日志文件的路径
  # 指定日志文件路径到桌面,等下排查集成问题有用,集成成功后删除,否则很占磁盘空间
  export CCACHE_LOGFILE='~/Desktop/CCache.log'
//执行/usr/bin/clang命令,"$@"是指所有参数
  exec ccache /usr/bin/clang "$@"
else
//执行系统默认的clang命令,"$@"是指所有参数
  exec clang "$@"
fi

所以然后把 if else 强行删掉 发现编译出现这个报错


iOS使用ccache没有生效的解决方法_第1张图片
error

最后定位到是机器的环境变量出现了问题 最后就成了文章顶部的解决方法
希望帮助到大家 谢谢

你可能感兴趣的:(iOS使用ccache没有生效的解决方法)