2012-04-13 96 views
3

据我所知,ccache通过捕获先前的汇编和检测何时再次完成相同的编译来加速编译。然而,makefile做同样的事情。 那么为什么我们需要ccache? 何时我们使用它? 谢谢!何时使用ccache?

回答

4

http://ccache.samba.org/

如果你运行make clean; make,你也许可以从 的ccache受益。由于许多原因,开发人员通常会干净地构建一个项目 ,并且这会抛弃以前编译中的所有信息 。通过使用ccache,重新编译快得多 。

使用ccache的另一个原因是相同的缓存用于在不同目录中构建 。如果您有几个版本或分支 存储在不同目录中的软件,构建目录中的许多目标文件 可能会从缓存中取出,即使它们已被编译为其他版本或分支。

第三种情况是使用ccache加速由 服务器执行的清理构建,或者构建可定期检查代码为 可构建的服务器场。

您还可以在共享编译服务器上共享用户之间的缓存,这对于非常有用的 。

+2

当我们运行make clean时,我们要清除所有的.o文件并重新编译。所以,如果我们想将先前的编译保存到缓存中,为什么不避免在之前运行make clean? – chicklet 2012-04-13 07:52:23

+3

您可能刚刚更改了'Makefile'。或者你可能试图在没有'git'的情况下对一个bug进行分割:如果你解压缩一个旧版本的tarball,'make'会认为二进制文件是最新的,因为它们比源文件更新 - 但这将是错误的!在这两种情况下,都需要“干净”。 'ccache'不会犯同样的错误,因为它使用散列而不是时间戳,并且非常小心只能在输出相同的情况下进行。 – joeytwiddle 2014-08-05 19:45:43

1
从加快清洁的可疑益处

除了建立由虚线构建系统必要,并具有共享高速缓存的单纯偶然益处,存在即使对分离的无瑕疵的mtime基于构建系统合法使用的ccache的:

当你在分支之间来回跳动(不是在谈论单独的目录)或重新绑定,以至于最终碰到一大堆文件,或者如果你不走运,中央标题(如定义的)。 h)包含在所有的地方,你完美的基于mtime的构建系统会尽职地重建所有东西。如果你在过去的某段时间内建立了大部分相同的状态,ccache将加速这一重建过程。