1

我正在尝试使用 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 ,但没有运气。

4

1 回答 1

3

正确的是 ccache 当前不支持编译器选项-M-MM(并且它从未支持它们)。

有问题的选项不被支持的一些原因:

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

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

但是,我(作为过去六年的 ccache 维护者)直到现在还没有听说有人缺少对-M/的支持,所以我的印象是/实际上并没有被太多使用。-MM-M-MM

我错过了什么吗?有更好的选择吗?

是的,我会说标准方法是使用-MD/ -MMD(由 ccache 支持)而不是-M/ -MM-MD/-MMD是优越的,因为它们一次生成.o.d文件,而-M/-MM只生成.d文件,因此在这种情况下,编译器必须由 Makefile 为每个源代码文件调用两次。有关如何使用/的信息,请参见例如http://www.microhowto.info/howto/automatically_generate_makefile_dependencies.html-MD-MMD

于 2015-07-23T12:42:06.580 回答