2016-03-30 2 views
-2

Я пытаюсь создать make-файл для моей java-программы, которая включает в себя несколько файлов. Раньше я имел успех создавая Makefile для одного файла с помощью этого:Java Makefile для нескольких файлов

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

чистые: ет -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 

Когда я пытаюсь запустить сделать на этом, он производит ошибку «Нет правило, чтобы сделать целевую JAVAC необходимой Dijkstra.class». Я закрываю то, что у меня есть? Как я могу отредактировать его, чтобы он работал правильно? Благодаря!

РЕДАКТИРОВАТЬ: При повторной попытке, я, должно быть, что-то изменил из первоначального варианта. Теперь он создает список всех файлов без перерыва между командой say не существует. Очевидно, тогда я неправильно читаю все файлы.

EDIT 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, когда я их подтягивал, ошибок нет? Что может быть причиной этого?

+4

Лично я бы взглянуть на Ant и/или Maven или любой другой системы сборки, так как это поможет улучшить ваши общие навыки и помочь вам понять процесс сборки из командной строки в любом случае – MadProgrammer

+1

Не должно быть '\\' после MinHeap.java – John3136

+0

Кроме того, если вы используете maven, он может автоматически загружать плагины и зависимости для вас. – Majora320

ответ

0

Вот окончательное решение, которое я придумал:

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 
Смежные вопросы