Build 计算生成文件生成时间

Build 计算生成文件生成时间,build,makefile,environment-variables,Build,Makefile,Environment Variables,如何使用环境变量来计算makefile的完整构建时间,有什么创造性的想法吗?我可以将时间存储在某个地方,并在最后进行比较吗?在Windows 7上,您拥有PowerShell。因此,我们假设: 您的makefilemakefile位于目录C:\Dev\ProjDir 您的make工具是mingw32 make,并且位于您的路径中 如果PowerShell不是您常用的控制台,请执行以下操作: C:\Dev\ProjDir>powershell 在PowerShell提示符下,运行: P

如何使用环境变量来计算makefile的完整构建时间,有什么创造性的想法吗?我可以将时间存储在某个地方,并在最后进行比较吗?

在Windows 7上,您拥有PowerShell。因此,我们假设:

  • 您的makefile
    makefile
    位于目录
    C:\Dev\ProjDir
  • 您的make工具是
    mingw32 make
    ,并且位于您的
    路径中
如果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的一部分实现, 所以我可以决定测量哪个部分

计时“生成文件的一部分”的想法没有明确的意义。当您运行
make
时,它将解析 在生成任何内容并计算出整个 创建指定或默认目标所必须采取的步骤。然后,它需要所有这些 步骤

也许您想测量制定一组特定目标所需的时间?你 可以按照前面描述的方式来完成。例如,假设您的makefile 可以创建两个库
libfoo.lib
libbar.lib
,并且您希望为 构建just
libfoo.lib
。要自行生成
libfoo.lib
,可以使用make命令 跑步是:

因此,要计算此命令的时间,请运行:

PS C:\Dev\ProjDir> Measure-Command { mingw32-make libfoo.lib | Out-Default }
或者假设您的makefile从源文件
foo.c
bar.c
生成
app.exe
,并且 您希望只计算对象文件的构建时间
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命令
确定特定目标建设的时间

为此,您需要一个调用PowerShell以运行其他命令的命令。即:

powershell -c "some other command"
因此,您可以在makefile中添加一个目标,用于为任何其他目标的构建计时:

.phony: time
time:
    powershell -c "Measure-Command { $(MAKE) $(targets) | Out-Default }"
您可以这样使用
时间
目标:

C:\Dev\ProjDir>mingw32-make time targets=app.exe
或:

当然,在makefile中,构建特定目标的命令可以
包括
powershell-c“其他一些命令”
,只要你喜欢。

我知道OP是指Windows操作系统,但请记住,在任何Linux机器上,你都可以使用
time

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

这将取决于您所谈论的操作系统。假设它可以在没有环境变量的情况下完成?mingw制作3.82版WIN7操作系统。这两种方法都可以,有或没有e-variables这确实有效,但我想知道它是否可以作为makefile的一部分实现,这样我就可以决定测量哪一部分了。“-c”选项解决了我的问题,我可以指出带有PowerShell的eclipse构建-c“…”谢谢!!不客气。如果你认为答案能解决你的问题,那么接受它是合适的:
C:\Dev\ProjDir>mingw32-make time targets="foo.obj bar.obj"
>time make -j
real     0m9.774s
user     0m31.562s
sys      0m1.092s