2013-02-28 2 views
5

Мне нужно скомпилировать мою программу, а затем выполнить ее 3 раза с другим .txt-файлом в качестве первого аргумента командной строки каждый раз, и все это нужно сделать с помощью одной команды «make». Соответствующие команды терминальные, что я хочу мой Makefile, чтобы сделать это следующим образом:Как создать файл Makefile, который будет компилировать и запускать Java-код с аргументами командной строки?

javac MainDriver.java FSA.java State.java Transition.java 
java MainDriver test1.txt 
java MainDriver test2.txt 
java MainDriver test3.txt 

Вот что я в настоящее время:

JC = javac 
JCR = java 

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

CLASSES = \ 
    MainDriver.java \ 
    FSA.java \ 
    State.java \ 
    Transition.java 

default: classes 

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

clean: 
    $(RM) *.class *~ 
+0

Считаете ли вы, с помощью Apache Ant вместо сделать? – beny23

ответ

2
JC = javac 
JCR = java 

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

CLASSES = \ 
    MainDriver.java \ 
    FSA.java \ 
    State.java \ 
    Transition.java 

TXT_FILES = \ 
    test1.txt \ 
    test2.txt \ 
    test3.txt \ 

default: classes exec-tests 

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

clean: 
    $(RM) *.class *~ 

exec-tests: classes 
    set -e; \ 
    for file in $(TXT_FILES); do $(JCR) MainDriver $$file; done; 


.PHONY: default clean classes exec-tests 
+0

Я попытался использовать это и получил следующее сообщение об ошибке для каждого теста: 'Исключение в потоке«главный»java.lang.NoClassDefFoundError: test1/TXT Вызванный: java.lang.ClassNotFoundException: test1.txt \t в java.net .URLClassLoader $ 1.run (URLClassLoader.java:202) \t на java.security.AccessController.doPrivileged (Native Method) \t в java.net.URLClassLoader.findClass (URLClassLoader.java:190) \t в java.lang. ClassLoader.loadClass (ClassLoader.java:306) \t at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:301) \t at java.lang.ClassLoader.loadClass (ClassLoader.java:247) ' – soccercta100

+1

К сожалению, пропущено фактическое двоичное. Обновите ответ. Я также предполагаю, что вы хотите запустить все двоичные файлы со всеми текстовыми файлами. Это верно ? – Tuxdude

+1

Также добавлен набор -e, так что он останавливается при первой ошибке. Удалите эту строку, если вы не хотите этого поведения. – Tuxdude

Смежные вопросы