【问题标题】:How ccache improves building speed?ccache 如何提高构建速度?
【发布时间】:2020-12-05 07:23:52
【问题描述】:

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

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

【问题讨论】:

  • “我发现我的 cmake 只知道重新编译更改的文件” - 你确定它不是生成过程中使用的构建系统,例如 make 或 ninja,知道吗? ?
  • 我用的是忍者,所以我相信是忍者

标签: c++ cmake compilation ccache


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    如果您重复执行此操作,ccache 将避免在整个源代码上运行编译器,并且会简单地取出适当的对象模块而不是从头开始编译源代码。

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

    【讨论】:

      猜你喜欢
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 2019-05-18
      • 2020-03-10
      • 2016-09-01
      • 2017-06-02
      相关资源
      最近更新 更多