Как скомпилировать с указанной целью, используя Makefile в Java?

#java #makefile #compilation

#java #makefile #Сборник

Вопрос:

Я пытаюсь написать Makefile для своего Java-проекта. Моя цель -:

1. Скомпилируйте с помощью целевого make-java

2. Запустите с помощью целевого запуска-java

Я видел в Интернете этот пример Makefile:

   JFLAGS = -g
    JC = javac
    
    .SUFFIXES: .java .class
    
    .java.class:
        $(JC) $(JFLAGS) $*.java
    
    
    CLASSES = 
              Main.java 
              Book.java 
              Library.java 
    
    default: classes
    
    classes: $(CLASSES:.java=.class)
    
    clean:
        $(RM) *.class
        
    run-java:
        java Main
  

Моя проблема заключается в цели make-java (1-й вариант), когда я пытаюсь изменить:

 .java.class:
        $(JC) $(JFLAGS) $*.java
  

Для

 make-java:
        $(JC) $(JFLAGS) $*.java
  

Это не работает. Можете ли вы дать мне решение о том, как изменить его, чтобы скомпилировать со следующей командой: make make-java

Спасибо

Ответ №1:

Вы не можете изменить это правило. Это правило суффикса; по сути, это шаблон, который гласит: «вот как создать файл .class из файла .java». Комбинация .SUFFIXES параметра .java .class и правила со специальной формой .java.class имеет этот эффект.

Если вы измените его, вы удалите понимание make о том, как создавать файлы .class.

Вы хотите оставить это в покое и добавить это вместо этого:

 make-java: classes
  

чтобы сообщить make, что он должен создавать все .class файлы при make make-java вызове.