【问题标题】:Can MinGW Make be sped up without disabling implicit rules?可以在不禁用隐式规则的情况下加速 MinGW Make 吗?
【发布时间】:2015-03-26 10:35:18
【问题描述】:

众所周知,MinGW 下的 GNU Make 在某些条件下非常慢,因为它如何执行隐式规则以及 Windows 如何公开文件信息(根据“MinGW “make” starts very slowly”)。

上一个问题以及我在 Internet 上找到的有关该问题的所有其他资源都建议通过使用 -r 标志完全禁用隐式规则来解决该问题。但是还有其他方法吗?

我有一个依赖于它们的“便携式”Makefile,并且我想制作它,以便每次启动它不需要大约一分钟,而不必让 Makefile 所有者更改它只为我。

【问题讨论】:

  • 问题是为什么启动需要很长时间。默认规则和变量当然很重要,但还有很多其他的事情也很重要。 Cygwin 和 MinGW 在我所见/所闻的任何事情上都不快,所以这无济于事。 makefile 是否对 $(shell)$(wildcard) 等进行了任何花哨的操作?
  • 我阅读了链接的问题。它表示一个可以加速启动的东西。 并不是唯一可以减慢制作处理速度的事情。 make 所做的工作量(即使不需要构建)取决于 makefile 的内容。

标签: makefile mingw gnu-make msys


【解决方案1】:

您应该使用make -d 来查看 make 正在做的所有事情,并尝试查看时间在哪里。长时间生成时间的一个常见原因是匹配任何规则,这些规则用于确定是否需要重建生成文件。大多数 match-anything 规则都可以删除;他们已经很少需要了。

您可以将其添加到您的 makefile 中,看看是否有帮助:

%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%

而且,如果您不需要自动创建您的 makefile,您可以添加:

Makefile: ;

(还可以将不需要自动创建的任何包含的 makefile 放在那里)。

预计到达时间 看来您的真正问题可以总结为“为什么 make 在 Windows 上比在 Linux 上启动需要更长的时间,在不更改 makefile 的情况下我可以做些什么来解决这个问题?”

答案是,什么都没有。 Make 在 Windows 和 Linux 上所做的工作量完全相同:在 Windows 上没有可以删除的额外规则或程序。问题是 Windows NTFS 对于这些查找来说比典型的 Linux 文件系统慢。我知道没有可以解决此问题的系统设置等。您唯一的选择是让 make 做更少的工作以使其更快,而做到这一点的唯一方法是删除您不需要的内置规则。

如果问题是你真的不想编辑实际的makefile,解决起来很简单:只需将上面的规则写入一个小的单独的makefile,可能类似于speedup.mk,然后设置环境变量@987654325 @ 在调用 make 之前。 Make 也会解析该 makefile,而无需您更改任何 makefile。

【讨论】:

  • 不,我已经知道为什么它很慢(按照问题中的链接)。我现在要问的是是否有其他解决方法或修复方法。
  • @LightnessRacesinOrbit 你不知道(除非你已经分析并且没有告诉我们)你有一个理论认为它可能是内置规则(再次除非你知道使用 @987654326 @ 在你的情况下大大加快了速度)。此外,这篇文章中的建议手动删除了一些内置规则。
  • 给了你一个修复。您是否尝试过我建议的更改?他们工作了吗?您是否尝试过我运行make -d 的建议,以查看您可能能够避免的事情 make 正在做什么?如果您不打算尝试我们的建议并就其效果提供反馈,那么我们将无法为您提供帮助。
  • @LightnessRacesinOrbit 此处介绍的解决方案在不禁用所有内置规则的情况下删除了许多最昂贵的内置规则。这似乎是正是你所说的你正在寻找的东西。如果不是,并且您仍然不想接受任何其他可能的事情可能会影响启动时间(或者这不是关于您的情况的问题,而只是一个更普遍的问题),请再次解释。还是您指的是“为我更改 Makefile”位?
  • 你有理由相信make在Windows上更多规则吗?我不。我确实相信,如链接答案中所示,Windows(至少由 MinGW make 使用)在处理这些规则所涉及的文件检查时要慢得多。因此,禁用规则是解决方案。没有找到替代(更快)的方法来测试它并修改 make 本身或修复 Windows 本身以更快地进行所需的检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多