2013-02-28 10 views
5

Devo essere in grado di compilare il mio programma, quindi eseguirlo 3 volte diverse con un file .txt diverso come il primo argomento della riga di comando ogni volta, e tutto ciò deve essere fatto con un singolo comando "make". I rispettivi comandi da terminale per quello che voglio il mio Makefile da fare sono le seguenti:Come creo un Makefile che compilerà ed eseguirà il codice java con gli argomenti della riga di comando?

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

Ecco quello che ho attualmente:

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

Ti considerare l'utilizzo di Apache Ant, invece di fare? – beny23

risposta

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

Ho provato ad utilizzare questo ed ottenuto il seguente errore per ogni prova: 'Exception in thread "main" java.lang.NoClassDefFoundError: test1/txt causati da: java.lang.ClassNotFoundException: test1.txt \t a java.net .URLClassLoader $ 1.run (URLClassLoader.java:202) \t a java.security.AccessController.doPrivileged (metodo natale) \t a java.net.URLClassLoader.findClass (URLClassLoader.java:190) \t a java.lang. ClassLoader.loadClass (ClassLoader.java:306) \t at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:301) \t in java.lang.ClassLoader.loadClass (ClassLoader.java:247) ' – soccercta100

+1

Oops ha saltato l'attuale binario. Ho aggiornato la risposta. Suppongo anche che tu voglia eseguire tutti i binari con tutti i file di testo. È corretto ? – Tuxdude

+1

Aggiunta anche una serie -e, in modo che si fermi al primo errore. Rimuovi quella linea se non vuoi questo comportamento. – Tuxdude

Problemi correlati