0

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

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

4

2 回答 2

3

考虑一下您切换到项目的某个较旧分支的情况 - 您过去确实编译过并且 ccache 已缓存,但 CMake 认为“几乎所有文件都已更改并且必须重新编译” - 这就是您看到巨大收益的地方.

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

还; ccache设置起来很简单,从那时起就完全不可见/透明,所以真的没有理由不使用它。当它有帮助时,它通常有很大帮助,当它没有帮助时,它不会受到伤害。

于 2020-08-15T17:57:42.807 回答
3

cmake/gmake并且ccache不相互排斥。它们通常一起使用。

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

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

如果您重复执行此操作,ccache将避免必须在整个源代码上运行编译器,并且只需获取适当的目标模块而不是从头开始编译源代码。

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

于 2020-08-15T17:59:06.563 回答