2013-02-28 4 views
5

Ich muss in der Lage sein, mein Programm zu kompilieren, dann führe es 3 verschiedene Male mit einer anderen .txt-Datei als das erste Befehlszeilenargument jedes Mal aus, und das alles muss mit einem einzigen "make" -Befehl erledigt werden. Die jeweiligen Terminal-Befehle für das, was ich meine Makefile wollen, sind zu tun, wie folgt:Wie erstelle ich ein Makefile, das Java-Code mit Befehlszeilenargumenten kompiliert und ausführt?

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

Hier ist, was ich habe zur Zeit:

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

Würden Sie Apache Ant statt machen in Betracht ziehen? – beny23

Antwort

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

Ich habe versucht, dies mit und bekam die folgende Fehlermeldung für jeden Test: 'Exception in thread "main" java.lang.NoClassDefFoundError: test1/txt Verursacht durch: java.lang.ClassNotFoundException: test1.txt \t bei java.net .URLClassLoader $ 1.run (URLClassLoader.java:202) \t bei java.security.AccessController.doPrivileged (Mutter Methode) \t bei java.net.URLClassLoader.findClass (URLClassLoader.java:190) \t bei java.lang. ClassLoader.loadClass (ClassLoader.java306) \t bei sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:301) \t bei java.lang.ClassLoader.loadClass (ClassLoader.java:247) ' – soccercta100

+1

Hoppla fehlte die eigentliche Binärdatei. Habe die Antwort aktualisiert. Ich nehme auch an, dass Sie alle Binärdateien mit allen Textdateien ausführen möchten. Ist das korrekt ? – Tuxdude

+1

Außerdem wurde eine Menge -e hinzugefügt, so dass sie beim ersten Fehler anhält. Entfernen Sie diese Zeile, wenn Sie dieses Verhalten nicht möchten. – Tuxdude

Verwandte Themen