ccache如何提高构建速度



我正在使用cmake来设置我的项目,当我更改项目中的文件时,我发现我的cmake知道只重新编译更改后的文件,然后重新链接所有内容以获得最终的可执行文件/lib。

然后,我通读了关于ccache的文档,我不明白的是:ccache的方法(使用哈希值检查文件是否更改并需要重新编译(和cmake使用的默认方法之间有什么区别(或者可能有其他方法而不是cmake检查文件更新,但你知道我在这里的意思(。也许PCH部分有所不同,但cmake 3.18现在有PCH支持,所以,这是否意味着ccache在PCH部分提供的好处不再是唯一的?

考虑这样一种情况,即您切换到项目的某个旧分支——您过去曾编译过该分支,并且ccache已缓存,但CMake将其视为"几乎所有文件都已更改,必须重新编译"-这就是你看到巨大收益的地方。

另一种情况是,您已经删除了构建目录(出于某些充分的原因(,现在必须重新构建所有内容。ccache也是一个巨大的帮助。

此外;ccache设置起来很琐碎,从此完全不可见/透明,所以真的没有理由不使用它。当它有帮助时,通常会有很大帮助,当它没有帮助时,也不会有伤害。

cmake/gmakeccache不是互斥的。它们通常一起使用。

整个源树由于某种原因需要重建时,ccache就会发挥作用。cmake/gmake只重建更改后的文件,但在某些情况下,需要重新编译整个源树。如果这种情况重复发生,ccache将唤醒并使编译器短路。C++编译器因速度慢而臭名昭著,这通常有很大帮助。

举几个例子:当你需要在有优化和没有优化的构建之间反复切换时,反复切换。cmake/gmake在编辑makefile和调整编译标志时对您没有帮助。实际上没有任何源文件发生更改,所以cmake/gmake认为没有什么可做的,所以您必须显式地make clean并从头开始重新编译。

如果重复执行,ccache将避免在整个源代码上运行编译器,只需取出适当的对象模块,而不是从头开始编译源代码。

另一种常见的情况是,当您运行脚本为代码准备可安装的包时。这通常涉及使用特定于实现的工具从头开始将源代码重新构建为可安装的包。

最新更新