我希望只有在目标文件超过某个时间间隔时才会重建Makefile目标。
作为一个例子,假设我有一些方法可以生成一天有效的密钥,但生成它需要花费很多时间。我可以在每次需要时重新生成它:
.PHONY: key
key:
sleep 5 && echo generated > key
foo: key
echo foo
bar: key
echo bar
但是,在一天中,我可能会多次输入make foo
或make bar
。每次等待都很烦人,我宁愿每天吃这个费用一次。
答案 0 :(得分:4)
让生成的文件依赖于key-timestamp
之类的虚拟文件,然后每天都有一个cron作业touch
。
答案 1 :(得分:0)
.PHONY: key.update key.check
foo: key.check
echo foo
bar: key.check
echo bar
key.check: key
@find key -mmin +1440 -exec make key.update \;
key:
make key.update
key.update:
sleep 5 && echo generated > key
应能按预期工作,如果您无权访问find
,则必须用类似的内容替换它。基本上,将其替换为可以检测到该密钥最近一次在1天或更长时间前被修改的内容。
.PHONY
将强制规则运行。
我还深入研究了order-only-prerequisites
,这需要立即运行两次makefile以每24小时仅更新一次密钥。不太实用。
但这是一个技巧,我不建议将其作为Makefile的正常使用。
答案 2 :(得分:-1)
要在一定时间后重建目标,您需要一个帮助文件,依靠该文件并用力触摸该帮助文件,例如(例如,每天):
target: target.helper
script-or-rule
target.helper: FORCE
@touch -d -1day $@
FORCE: