关键词
- 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 强行删掉 发现编译出现这个报错
error
最后定位到是机器的环境变量出现了问题 最后就成了文章顶部的解决方法
希望帮助到大家 谢谢
网友评论