iOS编译加速-CCache

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS编译加速-CCache相关的知识,希望对你有一定的参考价值。

参考技术A CCache是一个编译工具,可以将xcode编译文件缓存起来,从而达到编译提速。

优点
能大幅度地提升编译速度,起码要减少掉 50% 的编译时间
不需要对项目作出重大调整
不需要改变开发工具链

缺点
不支持clang的modules,需要手动引入链接库
不支持oc++
不支持swift

brew install ccache

需要两个脚本,需要对c++和oc分别处理

修改两个文件的权限
$ chmod 777 ccache-clang

cache directory /Users/frank/.ccache
primary config /Users/frank/.ccache/ccache.conf
secondary config (readonly) /usr/local/Cellar/ccache/3.6/etc/ccache.conf
stats updated Thu Apr 25 17:20:42 2019
cache hit (direct) 0
cache hit (preprocessed) 1
cache miss 855
cache hit rate 0.12 %
called for link 1
compile failed 4
unsupported compiler option 487
no input file 2
cleanups performed 0
files in cache 4134
cache size 133.5 MB
max cache size 10.0 GB

移除PCH,CCache是通过md4进行缓存查找,因此当你修改了 PCH 或者 PCH 引用到的头文件的内容时,会造成全部缓存失效,只能全体重新编译。

工作空间之间的 Android ccache 共享

【中文标题】工作空间之间的 Android ccache 共享【英文标题】:Android ccache sharing among workspaces 【发布时间】:2014-04-25 23:37:49 【问题描述】:

我想共享使用一个工作空间构建的 ccache 以供另一个工作空间使用,以便使用 ccache 数据的一份副本来编译相同的源代码。

例如: 1)创建了一个工作区(home/user/source_code1)。 2)从服务器同步代码。 3) 使用 USE_CCACHE=1 编译代码

以上将构建我的 ccache。现在我执行以下操作

案例 1: 1)创建了一个工作区(home/user/source_code2)。 2)从服务器同步相同的源代码。 3) 进行与我在之前工作区中所做的相同的编译。

案例 2: 1) 删除工作区 home/user/source_code1 2) 重新创建之前的工作区(home/user/source_code1)。 2)从服务器重新同步代码。 3) 使用 USE_CCACHE=1 编译代码

我希望 source_code2 编译使用从 source_code1 构建的 ccache,当我删除并重新创建相同的工作区时,我需要在已经构建的 ccache 的情况下进行编译。 欢迎任何实现相同目标的指针!

我现在在上述两种情况下看到的结果是,虽然构建了 ccache,但它从未使用过,或者 ccache 中没有命中,只要使用新工作区,它就会继续构建,如果我只是清理在同一个工作空间中构建和重新编译,而不删除任何早期的源代码(home/user/source_code1),然后 ccache 编译跳进去,有一些命中有助于减少构建时间。

知道为什么我在使用全新的工作区时看不到任何 ccache 命中吗?

我总是增加“ccache miss”而不是“缓存命中(直接),或者,缓存命中(预处理)”。此外,“缓存命中(直接)”始终为 0。

我设置了以下变量。

CCACHE_BASEDIR=/home/user
USE_CCACHE=1
CCACHE_DIR=/home/user/ccache
CCACHE_SLOPPINESS=time_macros,file_macro

如果我在这里遗漏了什么,请告诉我。

【问题讨论】:

【参考方案1】:

也许你需要用ver替换ccache。 3.x 或以上。 据我所知,android源代码树中包含的ccache是​​ver。 2.4. 而CCACHE_BASEDIR 在 ccache 3.x 中工作,你可以参考下面的链接。

Set CCACHE_BASEDIR to share object files between trees

Andorid 构建脚本将使用他们预先构建的工具,而不是安装在您系统中的工具。

【讨论】:

以上是关于iOS编译加速-CCache的主要内容,如果未能解决你的问题,请参考以下文章

检测编译器是不是正在使用 ccache

ccache

我可以让 npm / gyp 使用 ccache 吗?

使用 gcc 和 ccache

使用 ccache / clang 编译 Qt 代码时避免多余的警告

如果编译器绝对路径在makefile中被硬编码,我应该如何使用ccache?