在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
但总是失败(打印消息)。 我有什么问题吗?在终端中执行这些命令会打印出精确到分钟的好时间。
答案 0 :(得分:0)
我会用不同的方法解决你的问题。我认为测试应该是shell命令的一部分,而不是make
特定命令的一部分。例如:
compile_service:
find YOURFILE -type f -Btime +5m -maxdepth 0 2>/dev/null && YOUR_DESIRED_COMMAND