Makefile с Java - PullRequest
       1

Makefile с Java

2 голосов
/ 18 февраля 2020

Я понимаю, что 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 target, потому что я определяю файлы, заканчивающиеся на .java. Я не знаю цели $(CLASSES:.java=.class), потому что я думал бы, что компиляция будет сделана уже перед этим шагом.

Кстати, я еще не скомпилировал код java (поэтому я запускаю make только с файлами java, если это имеет значение).

1 Ответ

1 голос
/ 18 февраля 2020

Это неправильно:

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

Здесь вы определили цель без предварительных условий и рецепта (который должен быть командой, используемой для перестроения цели), которая состоит из списка .class имена файлов, поэтому вы получаете сообщение об ошибке, потому что вы не можете «запустить» список .class файлов.

Вы хотите это:

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

, который определяет цель classes с набором предпосылок, которые являются файлами .class, которые вы хотите создать, и без рецепта, потому что вы не хотите создавать цель с именем classes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...