【问题标题】:GNU Make - how to add timestamp output (with minimal makefile modification)GNU Make - 如何添加时间戳输出(用最少的 makefile 修改)
【发布时间】:2016-12-29 05:02:44
【问题描述】:

我想更好地了解我的构建作业指标,但不幸的是,make 本身不输出时间戳。

如果我运行make --print-data-base,对于给定的目标,它会输出一行

#  Last modified 2016-08-15 13:53:16

但这并没有给我持续时间。

问题

有没有办法在不修改每个目标的情况下获得构建目标的持续时间?一些目标在构建过程中生成的 makefile 中,因此修改它们的配方是不可行的。

可能的解决方案

我可以implement a pre- and post-recipe for every target 并以这种方式输出时间戳。

考虑到这是并行的make,这是个好主意吗?显然,为每个目标调用前后配方会增加构建时间,但我可以接受。

【问题讨论】:

    标签: windows makefile gnu-make


    【解决方案1】:

    如果这是一个并行生成,那么“preactions”、“actions”和“postactions”可能会交错。也就是说,您可能会得到如下输出:

    Pre-action 12:03:05
    Pre-action 12:03:06
    building foo...
    building bar...
    Post-action 12:04:17
    Post-action 12:04:51
    

    因此,您应该将 TARGETNAME 变量传递给操作前和操作后脚本。

    此外,当您并行运行时,开始和结束时间并不是了解一个操作需要多长时间的全部;规则 A 可能比规则 B 花费更长的时间,因为规则 B 单独运行,而规则 A 与规则 C 到 J 共享处理器。

    除此之外,我认为这种方法没有问题。

    【讨论】:

    • SHELL 可以重新定义为递归扩展变量,因此SHELL = my-script $@ 可能是传递目标名称的一种简洁方式。此外,将.SHELLFLAGS 设置为空可能是个好主意。
    • 如果你觉得无聊,我发了一个offshoot question
    猜你喜欢
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 2019-02-19
    • 2014-01-01
    • 2019-10-02
    相关资源
    最近更新 更多