我在Windows下有一个C-Project,它是用makefile构建的。
现在我注意到,在调用gmake
之后,它需要大约40秒才会发生任何事情(直到那时没有输出生成且没有任何事情发生)。
然后我使用-d
标志来查找此问题的根源 - 使用此标志运行gmake
会在40秒内生成以下输出:
Creating temporary batch file C:\Users\User\AppData\Local\Temp\make564-1.bat
CreateProcess(C:\Users\User\AppData\Local\Temp\make564-1.bat, C:\Users\User\AppData\Local\Temp\make564-1.bat,...)
Cleaning up temporary batch file C:\Users\User\AppData\Local\Temp\make564-1.bat
此操作在前40秒内一次又一次地发生(同样的蝙蝠文件一遍又一遍)。 bat文件本身包含:
@echo off
dir /b/a-d/-W/s .\*.c .\*.s
我不认为这种行为是正常的(或者是吗?) - 我的意思是它只是一遍又一遍地创建相同的文件 - 我没有看到任何含义。 这个问题就是我每次尝试编译它时(不必要地丢失)的时间。
答案 0 :(得分:2)
请提供您正在使用的工具的版本(在本例中为GNU make),以及Windows的版本以及如何为Windows构建命令(cygwin,mingw,MSVC等)
make
绝对不会调用这样的命令。这意味着makefile中的某些东西正在这样做。我建议你查看你的makefile以找到包含该命令的行。
我怀疑当你找到它时,它会是这样的:
FOO = $(shell dir /b/a-d/-W/s .\\*.c .\\*.s)
每次使用变量时,这将重新评估右侧 。因此,如果您使用该变量20次,它将运行该命令20次。
将=
更改为:=
,这将强制命令在定义变量时运行一次。
您还可以考虑使用make的内置$(wildcard ...)
函数,该函数比dir
更快,更便携。