Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile:如果文件存在并且小于5分钟,则不执行其他操作_Makefile - Fatal编程技术网

Makefile:如果文件存在并且小于5分钟,则不执行其他操作

Makefile:如果文件存在并且小于5分钟,则不执行其他操作,makefile,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 empt

在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
但这总是失败(消息被打印出来)。
知道我做错了什么吗?在终端中执行这些命令可以打印出精确到分钟的好时间。

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

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

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

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

您的
ifneq
语句无法工作。。。如果
ifneq
,您似乎认为可以在参数中编写shell脚本:您不能
ifneq
是一个makefile构造,而不是shell脚本或配方:您只能在那里使用make命令。您的
ifneq
语句无法工作。。。如果
ifneq
,您似乎认为可以在参数中编写shell脚本:您不能
ifneq
是一个makefile构造,而不是shell脚本或配方:您只能在那里使用make命令。