gpt4 book ai didi

gnu-make - GNU make : Timing a build,是否有可能有一个目标,在所有目标完成后其配方将执行

转载 作者:行者123 更新时间:2023-12-01 12:58:08 24 4
gpt4 key购买 nike

我的问题类似于this onethis one

从本质上讲,我正在寻找类似以下内容的东西-或将其删除的相当干净的技巧:

GET_TIMESTAMP  = $(shell perl -e 'print time()')
START_TIME := ${GET_TIMESTAMP}

all: T1 T2 ... TN

T1:
T2:
...:
TN:

#...

timer:
@perl -e 'printf( "Loaded makefiles in %ds, build completed in %ds\n", $ARGV[1] - $ARGV[0], $ARGV[2] - $ARGV[1] );' ${START_TIME} ${LOAD_COMPLETE} ${GET_TIMESTAMP}

.ATEND: timer

LOAD_COMPLETE := ${GET_TIMESTAMP}

...可以通过多种方式启动:
~ gmake all
(...)
Loaded makefiles in 8s, build completed in 93s
~ gmake T2 T3 T4
(...)
Loaded makefiles in 8s, build completed in 13s

它的核心是 .ATEND特殊目标的想法,当所有 CMDGOALSDEFAULTGOALS完成时,会导致某些事情发生。

最佳答案

如果您只是想安排构建时间,并且您正在UNIXy平台上运行,为什么不只使用time本身呢?

如:

pax$ time sleep 1
real 0m1.004s
user 0m0.000s
sys 0m0.000s

(尽管在您的情况下,它当然是 time gmake all)。

与尝试在 make中编写代码并使用正确的工具进行工作相比,这似乎是一种更为优雅的解决方案。

或者,您可以将规则本身修改为:
all: T1 T2 ... TN
@perl -e blah blah blah

这将确保在完成所有目标之后执行Perl-您将不得不摆弄 makefile,因此这不是一种自动解决方案(您最好将自己限制在某些高级目标上),但是我不会认为这是一个巨大的负担,因为一旦正确设置,makefile往往相对不变。

关于gnu-make - GNU make : Timing a build,是否有可能有一个目标,在所有目标完成后其配方将执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8483149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com