Ccache不能使用gcc -M标志吗?

时间:2015-04-17 15:51:25

标签: gcc build g++ ccache

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

1 个答案:

答案 0 :(得分:2)

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

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

  1. 这些选项告诉编译器让预处理器输出生成规则而不是预处理的源代码。这与ccache的工作方式不太匹配;它需要为每个编译器调用获取“实际”预处理输出(参见https://ccache.dev/manual/latest.html#_how_ccache_works)。
  2. 没有人对上述选项实施支持,只需简单地说。
  3. 最有可能通过让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