【问题标题】:Calculate makefile build time计算makefile构建时间
【发布时间】:2014-05-27 07:03:04
【问题描述】:

任何创意如何使用环境变量来计算生成文件的完整构建时间?我可以将时间存储在某个地方并在最后进行比较吗?

【问题讨论】:

  • 这取决于你在说什么操作系统。并假设它可以在没有环境变量的情况下完成?
  • mingw 制作版本 3.82,WIN7 操作系统。它可以通过任何一种方式完成,有或没有电子变量

标签: build makefile environment-variables


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    在 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 before 它制作任何东西并计算出整个序列 制作指定或默认目标必须采取的步骤。然后,它需要所有这些 步骤。

    也许您想衡量制定一组特定目标所需的时间?你 可以按照已经描述的方式做到这一点。例如,假设您的 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 从源文件 foo.cbar.c 生成 app.exe,并且 您想只为构建目标文件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" 任何你喜欢的地方。

    【讨论】:

    • 这确实有效,但我想知道它是否可以作为 makefile 的一部分来实现,所以我可以决定测量哪个部分
    • 好吧,"-c" 选项解决了我的问题,我可以指出 Eclipse 使用 PowerShell -c "...." 构建,谢谢!!
    • 不客气。如果您认为某个答案可以解决您的问题,可以接受它:see how
    猜你喜欢
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多