gmake 在开始工作之前会反复创建和删除批处理文件



我在Windows下有一个C项目,它是用makefile构建的。现在我注意到,在调用gmake后,大约需要 ~40 秒,直到任何事情发生(在此之前,没有生成输出并且什么都没有发生)。

然后,我使用 -d 标志来查找此问题的根源 - 使用此标志运行gmake在这 40 秒内生成以下输出:

Creating temporary batch file C:UsersUserAppDataLocalTempmake564-1.bat
CreateProcess(C:UsersUserAppDataLocalTempmake564-1.bat, C:UsersUserAppDataLocalTempmake564-1.bat,...)
Cleaning up temporary batch file C:UsersUserAppDataLocalTempmake564-1.bat

此操作在前 40 秒内一次又一次地发生(一遍又一遍地使用相同的蝙蝠文件)。蝙蝠文件本身包含以下内容:

@echo off
dir /b/a-d/-W/s .*.c .*.s 

我不认为这种行为是正常的(或者它是吗?) - 我的意思是它只是一遍又一遍地创建相同的文件 - 我看不出这有什么意义。这个问题只是我每次尝试编译它的时间(不必要地丢失)。

请提供您正在使用的工具版本(在本例中为 GNU make),以及 Windows 的版本以及您如何为 Windows 构建命令(cygwin、mingw、MSVC 等)。

make绝对不会调用这样的命令。 所以这意味着你的制作文件中的某些东西正在这样做。 我建议您查看您的 makefile 以找到包含该命令的行。

我的怀疑是,当你找到它时,它会是这样的:

FOO = $(shell dir /b/a-d/-W/s .\*.c .\*.s)

每次使用该变量时,这将重新评估右侧。 因此,如果您使用该变量 20 次,它将运行该命令 20 次。

=更改为:=这将强制在定义变量时运行一次命令。

您也可以考虑使用 make 的内置$(wildcard ...)功能,它比 dir 更快、更便携

最新更新