Беда в том, что в вашем bash-скрипте переменная t
сохраняется от начала (до работы) до конца (когда ее можно вычесть из времени окончания).В рецепте Make каждая строка имеет свою собственную оболочку, поэтому переменная оболочки, заданная в более ранней строке, не будет доступна в более поздней.
Вы можете объединить все команды рецепта в однулинии, так что вы можете установить t
в начале и использовать его в конце, но это довольно неуклюже.Я бы посоветовал вам записать t
в файл, возможно rule1_time
, чтобы два вызова timer
не требовали общей переменной.Да, и не пытайтесь использовать call
внутри команды:
STIME = date '+%s' > $@_time
ETIME = read st < $@_time ; echo $$((`date '+%s'`-$$st))
all:
$(STIME)
do stuff
$(ETIME)
РЕДАКТИРОВАТЬ:
Я написал код выше в качестве доказательства концепции;Я собирался для ясности, а не уточнения.Если я правильно понимаю ваш комментарий, вы теперь хотите знать, как разбить время на часы, минуты и секунды, не вызывая несколько функций из каждого правила.Есть несколько способов сделать это, это, вероятно, самый чистый:
ETIME = @read st < $@_time ; st=$$((`date '+%s'`-$$st-68400)) ; echo Elapsed time: `date -d @$$st '+%H:%M:%S'`