Makefile 在不禁用隐式规则的情况下,可以加快MinGW Make的速度吗?

Makefile 在不禁用隐式规则的情况下,可以加快MinGW Make的速度吗?,makefile,mingw,gnu-make,msys,Makefile,Mingw,Gnu Make,Msys,众所周知,在某些情况下,MinGW下的GNU Make速度非常慢,这是由于它如何执行隐式规则以及Windows如何公开文件信息(per“”) 前面的问题和我在互联网上找到的关于这个问题的所有其他资源都建议通过完全使用-r标志禁用隐式规则来解决这个问题。但还有别的办法吗 我有一个依赖于它们的“可移植”Makefile,我希望每次启动它都不会花费大约一分钟的时间,而不必让Makefile所有者为我修改它。您应该使用make-d查看make正在做的所有事情,并尝试查看时间的走向。生成时间过长的一个常见

众所周知,在某些情况下,MinGW下的GNU Make速度非常慢,这是由于它如何执行隐式规则以及Windows如何公开文件信息(per“”)

前面的问题和我在互联网上找到的关于这个问题的所有其他资源都建议通过完全使用
-r
标志禁用隐式规则来解决这个问题。但还有别的办法吗


我有一个依赖于它们的“可移植”Makefile,我希望每次启动它都不会花费大约一分钟的时间,而不必让Makefile所有者为我修改它。

您应该使用
make-d
查看make正在做的所有事情,并尝试查看时间的走向。生成时间过长的一个常见原因是用于确定是否需要重新生成生成文件的匹配规则。大多数匹配规则都可以删除;现在已经很少需要它们了

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

%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%
如果不需要自动创建makefile,可以添加:

Makefile: ;
(同时将不需要自动创建的所有包含的makefile放在那里)

埃塔 似乎你真正的问题可以归结为:“为什么make在Windows上启动比在Linux上启动要长得多,在不更改makefiles的情况下,我能做些什么来修复它?”

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


如果问题是您真的不想编辑实际的makefile,那么解决这个问题非常简单:只需将上面的规则写入一个单独的小makefile,比如
speedup.mk
,然后在调用make之前设置环境变量
makefiles=speedup.mk
。Make也将解析该makefile,而无需更改任何makefiles。

问题是为什么启动需要很长时间。默认的规则和变量当然很重要,但其他很多东西也很重要。从我的所见所闻来看,Cygwin和MinGW对任何事情都反应不快,所以这没有帮助。makefile是否对
$(shell)
$(通配符)
等进行了任何处理?我阅读了链接问题。这表明有一件事可以加速启动。到目前为止,这并不是唯一一件可以减缓make处理速度的事情。make所做的工作量(即使不需要构建)取决于makefile的内容。不,我已经知道为什么它很慢(按照问题中的链接)。我现在要问的是是否还有其他解决方法或修复方法。@LightnessRacesinOrbit您不知道(除非您已经分析并没有告诉我们)您有一个理论,它可能是内置规则(同样,除非您知道在您的情况下使用
-r
会大大加快速度)。此外,本文中的建议是手动删除一些内置规则。我给了您一个修复方法。你试过我建议的改变吗?他们成功了吗?您是否尝试过我的建议,运行
make-d
,看看make在做什么,您可能可以避免?如果您不想尝试我们的建议并提供反馈意见,那么我们将无法帮助您。@LightnessRacesinOrbit此处提供的解决方案删除了许多最昂贵的内置规则,而没有禁用所有内置规则。看起来,这正是你说的你要找的。如果不是,并且你仍然不想接受任何其他可能的事情可能会影响启动时间(或者这不是一个关于你的情况的问题,只是一个更一般的问题),那么请再次解释。或者你指的是“为我更改Makefile”位?你有理由相信Windows上的make有更多的规则吗?我不。我相信,正如链接答案中所指出的,Windows(至少与MinGW make使用的一样)在处理这些规则所涉及的文件检查时要慢得多。因此,禁用规则是解决方案。没有找到一种替代的(更快的)方法来测试它,修改make本身或修复Windows本身以更快地完成所需的检查。