如何使用环境变量来计算makefile的完整构建时间?我可以将时间存储在某处并最终进行比较吗?
答案 0 :(得分:3)
我知道OP意味着Windows操作系统,但为了记录,在任何Linux机器上都可以使用time
:
>time make -j
real 0m9.774s
user 0m31.562s
sys 0m1.092s
答案 1 :(得分:1)
在Windows 7上,您已获得PowerShell。所以我们假设:
Makefile
位于目录C:\Dev\ProjDir
mingw32-make
,位于PATH
如果PowerShell不是您常用的控制台,那么请执行以下操作:
C:\Dev\ProjDir>powershell
在PowerShell提示符下,运行:
PS C:\Dev\ProjDir> Measure-Command { mingw32-make | Out-Default }
这将运行您的构建并显示输出,然后是 时间报告,例如
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 244
Ticks : 2443841
TotalDays : 2.82851967592593E-06
TotalHours : 6.78844722222222E-05
TotalMinutes : 0.00407306833333333
TotalSeconds : 0.2443841
TotalMilliseconds : 244.3841
继续进行OP的跟进:
我想知道是否可以将其作为makefile的一部分来实现, 所以我可以决定测量哪个部分
计时的概念" makefile的一部分"没有明确的意义。当您运行make
时,它会解析
整个makefile 在之前它会生成任何内容并完成整个序列
制作指定或默认目标必须采取的步骤。然后,它需要所有这些
步骤。
也许您想衡量制作一组特定目标所需的时间?您
可以用已经描述的方式做到这一点。例如,假设您的makefile
可以创建两个库libfoo.lib
和libbar.lib
,你想要计时
只构建libfoo.lib
。要自己制作libfoo.lib
,可以使用make命令
运行是:
mingw32-make libfoo.lib
所以要对这个命令计时,请运行:
PS C:\Dev\ProjDir> Measure-Command { mingw32-make libfoo.lib | Out-Default }
或者假设您的makefile从源文件app.exe
和foo.c
生成bar.c
,并且
您只想构建目标文件foo.obj
,bar.obj
。该
make命令你将运行以构建那些目标文件:
mingw32-make foo.obj bar.obj
所以你需要时间:
PS C:\Dev\ProjDir> Measure-Command { mingw32-make foo.obj bar.obj | Out-Default }
也许您希望能够在makefile中调用powershell' Measure-Command
为特定目标建立时间?
为此,您需要一个调用PowerShell来运行其他命令的命令。那就是:
powershell -c "some other command"
因此,在您的makefile中,您可以添加一个目标来计算任何其他目标的构建时间:
.phony: time
time:
powershell -c "Measure-Command { $(MAKE) $(targets) | Out-Default }"
您可以使用time
目标,如下所示:
C:\Dev\ProjDir>mingw32-make time targets=app.exe
或:
C:\Dev\ProjDir>mingw32-make time targets="foo.obj bar.obj"
当然,在makefile中,构建特定目标的命令可以
包括powershell -c "some other command"
,无论你喜欢什么。