Ну, я некоторое время удивлялся тому же и пробовал несколько вещей.Я полагаю, что рекурсивное создание может сделать это, но я пока избегаю этого.Жаль, что действительно нет .ATEND!
Примечание: Очевидно, что вы покажете, сколько времени займет переработка рецептов, если только не из чистого.
время
Итаккак предложил paxdiablo, команда unix time command является самой простой (и то, что я делал в прошлом).
% time make
на основе рецептов
Добавление таймера к каждому рецепту даст вам совокупное время выполнения, но не представление о том, сколько времени занял каждый рецепт (не то, что это было в вопросе).Однако для определенных рецептов вы можете снова использовать время внутри рецепта и даже передавать результаты в файл журнала (используя pipefail в bash).например,
# SHELL = /bin/bash -o pipefail
# @bash -o pipefail -c ' ( time /home/matt/bin/example_stdouterr.bash ) |& tee z.log'
# @bash -o pipefail -c ' ( time /home/matt/bin/example_stdouterr.bash ) 2>&1 | tee z.log '
резюме
Так что я думаю, что просто добавить его в большинство рецептов было бы лучшим.Вам не нужен специальный звонок тогда.Ниже приведен пример, который должен показывать различия с:
time -p make
time -p make -j 2
Пример
Дает совокупное время, а также метку времени.
TIME_START := $(shell date +%s)
define TIME-END
@time_end=`date +%s` ; time_exec=`awk -v "TS=${TIME_START}" -v "TE=$$time_end" 'BEGIN{TD=TE-TS;printf "%02dd:%02dh:%02dm:%02ds\n",TD/(60*60*24),TD/(60*60)%24,TD/(60)%60,TD%60}'` ; echo "##DATE end `date '+%Y-%m-%d %H:%M:%S %Z'` cumulative $${time_exec} $@"
endef
PHONY_GOALS := all
all: toprule1
$(TIME-END)
PHONY_GOALS += toprule1
toprule1: subrule1 subrule2
@echo toprule 1 start
@sleep 1
@echo toprule 1 done
$(TIME-END)
PHONY_GOALS += subrule1
subrule1: botrule1
@echo subrule 1 start
@sleep 1
@echo subrule 1 done
$(TIME-END)
PHONY_GOALS += subrule2
subrule2: botrule1
@echo subrule 2 start
@time -p sleep 2
@echo subrule 2 done
$(TIME-END)
PHONY_GOALS += botrule1
botrule1:
@echo botrule 1 start
@sleep 1
@echo "botrule 1 done"
$(TIME-END)
PHONY_GOALS += help
help:
@echo "$(info All the goals are: ${PHONY_GOALS})"
########### end bit
.PHONY :${PHONY_GOALS}
OTHER_GOALS := ${filter-out ${PHONY_GOALS}, ${MAKECMDGOALS}}
${OTHER_GOALS}: