可以加快MinGW Make而不禁用隐式规则吗?

时间:2015-01-27 17:50:17

标签: makefile mingw gnu-make msys

在MinGW下的GNU Make在某些情况下会因为它执行隐式规则以及Windows如何公开文件信息而非常慢(每个" MinGW “make” starts very slowly")。

上一个问题以及我在互联网上发现的所有其他资源建议通过完全使用-r标志禁用隐式规则来解决问题。但还有另一种方式吗?

我有一个便携式的" Makefile依赖于它们,并且我希望每次启动它都不需要花费大约一分钟来启动它,而不是让Makefile所有者只为我改变它。

1 个答案:

答案 0 :(得分:5)

你应该使用make -d查看所做的所有事情并尝试查看时间的去向。冗长的make时间的一个常见原因是match-anything规则,用于确定是否需要重建makefile。大多数匹配任何规则都可以删除;他们很少需要了。

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

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

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

Makefile: ;

(也将任何包含的makefile放在那里,你不需要自动创建)。

ETA 看起来你真正的问题可以概括为:“为什么在Windows上启动需要花费的时间比在Linux上启动要多得多,如果不改变makefile,我该怎么做才能解决这个问题?”

答案是,没有。 Make在Windows和Linux上的工作量完全相同:Windows上没有可以删除的额外规则或过程。问题是Windows NTFS比这些查找的典型Linux文件系统慢。我知道没有系统设置等可以解决这个问题。你唯一的选择是让make做更少的工作,以便更快,而唯一的方法就是删除你不需要的内置规则。

如果问题是你真的不想编辑实际的makefile,这很简单就可以解决:只需将上面的规则写入一个小的单独的makefile,可能是speedup.mk,然后设置环境变量调用make之前MAKEFILES=speedup.mk。 Make也会解析makefile,而不必更改任何makefile。