Makefile:如果文件存在且小于5分钟,则执行X else

时间:2017-03-08 10:50:09

标签: makefile

在Ubuntu 16.10上,我试图在makefile中表达以下语句:

if file exists and is younger than 5 minutes do X else nothing

目前,我相信我有部分解决方案。

compile_service:
ifeq ($(wildcard $(FILES)/$(CLASS).java)),"") #If file does not exist then $(wildcard file) will evaluate to an empty string.
else
ifeq ???
    CLASSPATH=$(RT) javac $(FILES)/$(CLASS).java
    $(CMD) $(FILES)/$(CLASS).class
endif
endif

但是,我在检查年龄方面存在问题,也不确定这是否是一种很好的方法。

目的是如果Java文件在X时间内没有被修改,我就不会重新编译它。

编辑:

我觉得我快到了。我正在尝试这样的事情:

compile_service:
ifneq (echo $(($(date +%s)/60)), echo $(($(stat -c %Y $(FILES)/$(CLASS).class)/60)))
    CLASSPATH=$(RT) javac $(FILES)/$(CLASS).java
    $(CMD) $(FILES)/$(CLASS).class
else
    $(info Makefile: Recent file exists, using that instead)
endif

但总是失败(打印消息)。 我有什么问题吗?在终端中执行这些命令会打印出精确到分钟的好时间。

1 个答案:

答案 0 :(得分:0)

我会用不同的方法解决你的问题。我认为测试应该是shell命令的一部分,而不是make特定命令的一部分。例如:

compile_service:
  find YOURFILE -type f -Btime +5m -maxdepth 0 2>/dev/null && YOUR_DESIRED_COMMAND