如何创建基于时间的Makefile规则?

时间:2010-01-06 03:28:10

标签: time makefile dependencies

我希望只有在目标文件超过某个时间间隔时才会重建Makefile目标。

作为一个例子,假设我有一些方法可以生成一天有效的密钥,但生成它需要花费很多时间。我可以在每次需要时重新生成它:

.PHONY: key
key:
    sleep 5 && echo generated > key
foo: key
    echo foo
bar: key
    echo bar

但是,在一天中,我可能会多次输入make foomake bar。每次等待都很烦人,我宁愿每天吃这个费用一次。

3 个答案:

答案 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: