0

我在 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 文件)。bat 文件本身包含以下内容:

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

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

4

1 回答 1

2

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

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

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

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

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

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

你也可以考虑使用 make 的内置$(wildcard ...)函数,它比dir.

于 2013-10-25T11:56:48.763 回答