我意识到make并不是与Java搭配使用的最佳工具,但我只是想尝试一下。我有这个脚本,但是我不确定为什么它不起作用:
JFLAGS = -g
JC = javac
SRC_DIR = $(PWD)
.SUFFIXES: .java .class
.java.class:
$(JC) $(JFLAGS) $*.java
CLASSES = \
$(SRC_DIR)/Fibonacci_Methods.java \
$(SRC_DIR)/Fibonacci_Methods_Test.java \
default: classes
classes:
$(CLASSES:.java=.class)
clean:
$(RM) *.class
我收到此错误:
/path/to/make_test/Fibonacci_Methods.class
/path/to/make_test/Fibonacci_Methods_Test.class
make: /path/to/make_test/Fibonacci_Methods.class: No such file or directory
make: *** [classes] Error 1
我不确定为什么。我的理解是该脚本应定义CLASSES
,该脚本应调用.java.class
目标,因为我正在定义以.java
结尾的文件。我不知道$(CLASSES:.java=.class)
的目的,因为我认为编译已经在此步骤之前完成了。
顺便说一下,我还没有编译Java代码(因此,如果有所不同,我将仅使用.java文件运行make。
这是错误的:
classes:
$(CLASSES:.java=.class)
这里您定义了一个没有先决条件和配方的目标(应该是用于重建目标的命令),该目标由一系列.class文件名组成,因此您会看到错误,因为您无法“运行” .class
文件列表。
您想要这个:
classes: $(CLASSES:.java=.class)
[它定义了具有一组先决条件的目标classes
,这些先决条件是您要构建的.class
文件,并且没有配方,因为您不想创建名为classes
的目标。