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

Lig*_*ica -3 mingw makefile gnu-make msys

已知MinGW下的GNU Make在某些情况下会非常慢,因为它执行隐式规则以及Windows如何公开文件信息(每个" MinGW"make"启动非常慢 ").

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

我有一个依赖它们的"可移植"Makefile,我想这样做每次启动它都不需要花一分钟时间,而不是让Makefile所有者为我改变它.

Mad*_*ist 5

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

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

%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%
Run Code Online (Sandbox Code Playgroud)

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

Makefile: ;
Run Code Online (Sandbox Code Playgroud)

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

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

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

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