计算makefile构建时间

时间:2014-05-27 07:03:04

标签: build makefile environment-variables

如何使用环境变量来计算makefile的完整构建时间?我可以将时间存储在某处并最终进行比较吗?

2 个答案:

答案 0 :(得分:3)

我知道OP意味着Windows操作系统,但为了记录,在任何Linux机器上都可以使用time

>time make -j
real     0m9.774s
user     0m31.562s
sys      0m1.092s

答案 1 :(得分:1)

在Windows 7上,您已获得PowerShell。所以我们假设:

  • 您的makefile 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.liblibbar.lib,你想要计时 只构建libfoo.lib。要自己制作libfoo.lib,可以使用make命令 运行是:

mingw32-make libfoo.lib

所以要对这个命令计时,请运行:

PS C:\Dev\ProjDir> Measure-Command { mingw32-make libfoo.lib | Out-Default }

或者假设您的makefile从源文件app.exefoo.c生成bar.c,并且 您只想构建目标文件foo.objbar.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",无论你喜欢什么。