带有Java的Makefile

问题描述 投票:1回答:1

我意识到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。

java makefile
1个回答
0
投票

这是错误的:

classes: 
        $(CLASSES:.java=.class)

这里您定义了一个没有先决条件和配方的目标(应该是用于重建目标的命令),该目标由一系列.class文件名组成,因此您会看到错误,因为您无法“运行” .class文件列表。

您想要这个:

classes: $(CLASSES:.java=.class)

[它定义了具有一组先决条件的目标classes,这些先决条件是您要构建的.class文件,并且没有配方,因为您不想创建名为classes的目标。

© www.soinside.com 2019 - 2024. All rights reserved.