什么时候使用ccache?

chi*_*let 6 ccache

据我所知,ccache通过捕获先前的编译并检测何时再次进行相同的编译来加快编译速度。但是,makefile做同样的事情。那么为什么我们需要ccache?我们什么时候使用它?谢谢!

use*_*284 7

除了由于损坏的构建系统而需要加速干净构建的可疑好处以及拥有共享缓存的偶然好处之外,即使对于基于孤立的完美 mtime 的构建系统,也存在 ccache 的合法使用:

当您在分支之间来回跳转(不是谈论单独的目录)或变基时,最终会接触到一大堆文件,或者如果您不幸的话,会包含一个中央标头(如config.h 在所有地方,基于 mtime 的完美构建系统都会尽职尽责地重建一切。如果您过去某个时间构建了几乎相同的状态,ccache 将加速此重建。


Del*_*ani 5

http://ccache.samba.org/

如果您曾经运行过make clean; make,则可能会受益于ccache。对于开发人员来说,出于多种原因进行干净的项目构建是很常见的做法,这会丢弃您以前的编译中的所有信息。通过使用ccache,重新编译要快得多。

使用ccache的另一个原因是,同一缓存用于不同目录中的构建。如果软件的多个版本或分支存储在不同的目录中,则即使是针对另一个版本或分支编译的,构建目录中的许多目标文件也可能会从缓存中获取。

第三种情况是使用ccache加速由服务器或构建场执行的干净构建,这些构建定期检查代码是否可构建。

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

  • 您可能刚刚更改了`Makefile`。否则,您可能会尝试在没有`git`的情况下将错误一分为二:如果解压缩项目旧版本的tarball,`make`会认为二进制文件是最新的,因为它们比源文件要新-但是那就错了!在这两种情况下,都需要“ make clean”。ccache不会犯同样的错误,因为它使用哈希而不是时间戳,并且仅在输出相同的情况下使用时要非常小心。 (4认同)
  • 当运行make clean时,我们希望清除所有.o文件并重新编译。因此,如果我们想将以前的编译保存到缓存中,为什么不先避免运行make clean? (2认同)