Ccache 不适用于 gcc -M 标志?
Posted
技术标签:
【中文标题】Ccache 不适用于 gcc -M 标志?【英文标题】:Ccache doesn't work with gcc -M flag? 【发布时间】:2015-04-17 15:51:24 【问题描述】:我正在尝试使用 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】:ccache 当前不支持编译器选项-M
和-MM
是正确的(而且它从未支持它们)。
有关选项不被支持的一些原因:
-
这些选项告诉编译器让预处理器输出制定规则,而不是预处理的源代码。这与 ccache 的工作方式不太匹配;它需要为每个编译器调用获取“真实的”预处理输出(参见https://ccache.dev/manual/3.7.11.html#_how_ccache_works)。
简单地说,没有人实现对上述选项的支持。
很可能通过让 ccache 运行编译器命令两次来实现支持:一个 没有 -M
/-MM
检索预处理的源代码(结果应该是关联)和一个 with -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
。
【讨论】:
使用这些正是我们最终所做的:)以上是关于Ccache 不适用于 gcc -M 标志?的主要内容,如果未能解决你的问题,请参考以下文章