Ccache 不适用于 gcc -M 标志?

Ccache doesn't work with gcc -M flag?

我正在尝试使用 ccache 来加速我的重建,我在日志中注意到了这一点:

[2015-04-17T10:41:45.845545 27682] Compiler option -M is unsupported
[2015-04-17T10:41:45.845584 27682] Failed; falling back to running the real compiler

根据我的经验,您需要诸如 -M 标志之类的东西才能使 make 或其等效触发器正确重建。 ccache 会被一个几乎每个项目的构建中都必须有的选项绊倒,这似乎很奇怪。我错过了什么吗?有没有更好的选择?

这是 w/ccache-3.2.1。

编辑:我也尝试使用 -MM,但没有成功。

ccache 目前不支持编译器选项 -M-MM 是正确的(而且它从来没有支持过它们)。

有关选项不受支持的一些原因:

  1. 这些选项告诉编译器让预处理器输出制定规则而不是预处理的源代码。这与 ccache 的工作方式不太匹配;它需要为每个编译器调用获取“真实的”预处理输出(参见 https://ccache.dev/manual/3.7.11.html#_how_ccache_works)。
  2. 简单地说,没有人实现对上述选项的支持。

最有可能通过让 ccache 运行 编译器命令两次来实现支持:一次 without -M/-MM检索预处理的源代码(结果应与其相关联)和一个 with -M/-MM 检索结果(制定规则)。

然而,我(作为过去六年的 ccache 维护者发言)直到现在还没有听说有人缺少对 -M/-MM 的支持,所以我的印象是 -M/-MM其实用的不多

Am I missing something? Is there a more preferred option?

是的,我会说标准的方法是使用-MD/-MMD(ccache 支持)而不是-M/-MM-MD/-MMD 更好,因为它们一次性生成 .o.d 文件,而 -M/-MM 只生成.d 文件,因此在这种情况下,Makefile 必须为每个源代码文件调用编译器两次。有关如何使用 -MD/-MMD.

的示例,请参阅 http://www.microhowto.info/howto/automatically_generate_makefile_dependencies.html