1
假設我有一個規則來構建一個大目標,並且運行時間太長。 它沒有任何依賴關係。如何在Makefile中使用TTL實現規則
例如,從Internet上下載一些內容可能是一項任務,例如下載大量頁面以供日後處理的網絡爬蟲。
我想只在最近一次運行超過1天/小時/分鐘前生成大目標。所以任務有TTL,有時間離開。
我可以通過下面的這個make文件來完成它。
如果有人制作「全部」目標,那麼只有在自上次構建之後超過5秒時纔會製作big_target和small_target。
有沒有人有另一個建議或與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