2013-02-28 12 views
5

Muszę być w stanie skompilować mój program, a następnie wykonać go 3 razy z innym plikiem txt jako pierwszym argumentem wiersza poleceń za każdym razem, a to wszystko musi zostać wykonane za pomocą pojedynczego polecenia "make". Odpowiednie komendy terminalowe na co chcę mój Makefile zrobić to w następujący sposób:Jak utworzyć plik Makefile, który skompiluje i uruchomi kod java z argumentami wiersza poleceń?

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

Oto co obecnie mam:

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

Czy uważają Państwo za pomocą Apache Ant zamiast zrobić? – beny23

Odpowiedz

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

Próbowałem za pomocą tego i mam następujący błąd dla każdego testu: 'Wyjątek w wątku "main" java.lang.NoClassDefFoundError: test1/txt Spowodowany przez: java.lang.ClassNotFoundException: test1.txt \t na java.net .URLClassLoader $ 1.run (URLClassLoader.java:202) \t na java.security.AccessController.doPrivileged (metoda podstawowa) \t na java.net.URLClassLoader.findClass (URLClassLoader.java:190) \t na java.lang. ClassLoader.loadClass (ClassLoader.java:306) \t at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:301) \t na java.lang.ClassLoader.loadClass (ClassLoader.java:247) ' – soccercta100

+1

Oops przegapił rzeczywistą wersję binarną. Zaktualizowałem odpowiedź. Zakładam również, że chcesz uruchomić wszystkie pliki binarne ze wszystkimi plikami tekstowymi. Czy to jest poprawne ? – Tuxdude

+1

Dodano także zestaw -e, aby zatrzymać się przy pierwszym błędzie. Usuń tę linię, jeśli nie chcesz tego zachowania. – Tuxdude

Powiązane problemy