Предположим, у меня есть правило для создания большой цели и занимает слишком много времени для запуска. У него нет зависимостей.Как реализовать правила с TTL в Makefile
Например, может потребоваться загрузить некоторый контент из Интернета, например веб-искатель, который загружает большое количество страниц для последующей обработки.
Я хочу сгенерировать большую цель, только если ее последний прогон был более 1 дня/час/минуту назад. Таким образом, задача имеет TTL, время уходить.
Я могу выполнить его через этот файл make ниже.
Если вы делаете цель «все», то big_target и small_target будут сделаны только в том случае, если прошло более 5 секунд с момента их создания.
Есть ли у кого-нибудь другое предложение или канонический способ сделать это с помощью make?
.PHONY: all update_times
all: update_times big_target small_target
update_times:
@for f in TTL_* ;\
do\
seconds=$${f##TTL_};\
if ((`date +%s` - `date +%s -r $$f` > $${seconds}));\
then\
echo "$$f is too old";\
echo $$((`date +%s` - `date +%s -r $$f`)) ;\
rm $$f;\
else\
echo "$$f is up to date";\
fi;\
done
TTL_%:
touch [email protected]
big_target: TTL_5
touch big_target
small_target: big_target
touch small_target