我希望有一个通用的Makefile,它接受任何目标名称和目标名称,检查是否存在某些源,然后执行一些命令。例如,我希望能够输入:
make mytarget
然后make应该检查是否存在 mytarget.src1 和 mytarget.src2 ,如果是,则执行一些命令。
我有以下makefile:
%:
$(MYCOMMANDS) $*.scr1 $*.scr2
唯一的问题是它在运行 $(MYCOMMANDS)之前不会检查$ .scr1和$ .scr2是否存在。这是可以理解的,因为我还没有指定任何依赖项。但是,当我尝试:
%: $*.src1 $*.src2
$(MYCOMMANDS) $*.scr1 $*.scr2
它现在没有运行 $(MYCOMMAND),并且没有规则来制作指定的目标。
有人可以解释为什么在我的第二个代码中找不到目标吗?另外,我怎样才能实现我想要的行为?
答案 0 :(得分:1)
编写模式规则的正确方法是在目标和中使用模式(%
):
%: %.src1 %.src2
$(MYCOMMANDS) $^
请参阅GNU make手册中的Pattern Rules。另请参阅Automatic Variables。顺便说一句,第二个链接中的第三段将解释为什么在先决条件中使用$*
进行第二次尝试无效。
答案 1 :(得分:0)
我能够使用MAKECMDGOALS变量获得我想要的行为。所以:
Task<Void> longRunningTask = new Task<Void>() {
@Override
protected Void call() throws Exception {
dbConnect();
Platform.runLater(() -> status.setText("Connected"));
return null;
}
};
button.setOnAction(e -> {
new Thread(longRunningTask).start();
});
做我想要的。它会检查以确保存在.src1和.src2。如果他们不会报告错误,如果他们这样做,将运行$(MYCOMMANDS)。