2013-02-28 47 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 2013-02-28 02:29:55

回答

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

我試過用這個,每次測試都得到以下錯誤: '線程中的異常「main」java.lang.NoClassDefFoundError:test1/txt 引起:java.lang.ClassNotFoundException:test1.txt \t at java.net .URLClassLoader $ 1.run(URLClassLoader.java:202) \t在java.security.AccessController.doPrivileged(本機方法) \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 2013-02-28 02:36:00

+1

哎呀錯過了實際的二進制文件。已經更新了答案。我還假設你想運行所有文本文件的所有二進制文件。那是對的嗎 ? – Tuxdude 2013-02-28 02:41:31

+1

還添加了一組-e,以便它在第一個錯誤上停止。如果你不想要這種行爲,請刪除該行。 – Tuxdude 2013-02-28 02:46:01

相關問題