用于多个文件的Java Makefile

时间:2016-03-30 01:16:06

标签: java file makefile javac

我正在尝试为包含多个文件的java程序创建一个makefile。以前,我使用以下方法成功为单个文件创建了一个makefile:

QuickSort.class:    QuickSort.java
javac -g QuickSort.java

清洁:     rm -f QuickSort.class

因为我需要编译多个文件,所以我更新了它:

Dijkstra.class: 
Dijkstra3.java\
DirGraph.java
FibDijkstra.java\
FibHeap.java\
MinDijkstra.java\
MinHeap.java\
javac -g Dijkstra3.java
javac -g DirGraph.java
javac -g FibDijkstra.java
javac -g FibHeap.java
javac -g MinDijkstra.java 
javac -g MinHeap.java
clean:
rm -f Dijkstra.class

当我尝试对此运行make时,会产生错误“Dijkstra.class不需要制作目标javac的规则”。我接近我的情况吗?如何编辑它以使其正常工作?谢谢!

编辑:重试时,我必须更改原始版本中的内容。现在它生成一个所有文件的列表,在命令不存在之间没有中断。显然,我没有正确地尝试阅读所有文件。

编辑2:我知道

JFLAGS = -g
JC = javac
.SUFFIXES: .java .class
.java.class:
$(JC) $(JFLAGS) $*.java

CLASSES = \
Dijkstra3.java\
DirGraph.java\
FibDijkstra.java\
FibHeap.java\
MinDijkstra.java\
MinHeap.java

default: classes

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

clean:
$(RM) *.class

当我运行它时,它不会为makefile产生任何错误。相反,它会为包含的文件本身产生错误。有什么奇怪的是,在NetBeans中,当我把它们拉起来时没有错误?可能是什么原因造成的?

1 个答案:

答案 0 :(得分:1)

这是我提出的最终解决方案:

JFLAGS = -g
JC = javac
.SUFFIXES: .java .class
.java.class:
$(JC) $(JFLAGS) $*.java

CLASSES = \
Dijkstra3.java\
DirGraph.java\
FibDijkstra.java\
FibHeap.java\
MinDijkstra.java\
MinHeap.java

default: classes

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

clean:
$(RM) *.class