[英]How to pass parameters from command line to a java program through makefile
我在堆棧溢出中的第一個問題...有點激動,但仍在問題中掙扎。
好的,我的問題是如何通過makefile將參數從命令行傳遞到Java程序。
老實說,我真的不知道我的描述是否正確.......因為我對Makefile不太了解...在我的作業中,描述是我們必須為GNU make開發一個Makefile來構建我們的程序。 例如,命令行
使
mipsim -v <test1.cmd> test1.log
將構建ISS(我們制造的模擬器),然后以調試輸出運行它,並從文件test1.cmd中獲取輸入命令,並將結果寫入test1.log。
我已經完成了該程序,但是我不知道如何使上述事情發生。 到目前為止,我所知道的只是使用makefile從.java文件中創建.class文件...。我不知道如何將test1.cmd作為輸入文件的名稱並將test1.log作為輸出文件的名稱。命令行...。我猜這兩個名稱可能會通過主函數中的String [] args進入我的程序...
有人可以給我些幫助嗎?
謝謝
關於這些問題有些困惑。
首先,使用make編譯Java有點困難。 (大多數人使用ant或maven。)但是,如果您不介意過多的開銷,則可以使用make來完成。 您可能應該從Java包層次結構根目錄中的目錄運行make。 您可以使用make宏確定以下所有Java文件。 提示:外殼:
JAVA_FILES = $(shell find -name \*.java)
然后運行javac。 (確保使用make宏定義到編譯器等的所有路徑名。)使用Java時,派生make目標並不容易,因為.class文件不是1:1 wrt Java文件。 我只是根據所有java文件使用目標“編譯”,並觸摸充當虛擬目標的文件。
第二,執行。 要調用不在可執行jar中的Java程序,請設置類路徑(選項-cp),指定主類名稱並添加命令行參數。 我必須知道“ mipsim”是什么-可能就是這樣做的shell腳本。 無論如何,make目標可以是日志文件:
%.log : %.cmd
${JAVA_HOME}/bin/java -cp ${ROOT} <$< >$@
現在, make test1.cmd
應該運行您的程序。
注意:重定向不是由程序參數指定的。 這是由外殼處理的。
有很多不相關的問題。
您顯示的語法: mipsim -v < test1.cmd > test1.log
會調用可執行的mipsim。 將“ -v”傳遞給args [1]。 將test1.cmd重定向為標准輸入,將test1.log重定向為標准輸出。 輸出輸入重定向由操作系統發生,因此在c ++中,從std :: cin讀取將讀取文件並寫入std :: cout將寫入test1.log
在Java中,這些將被重定向到System.in和System.out
關於makefile基本上,make文件規則如下所示:
<target>: <dependency1> .. < dependencyn>
~tab~ command
因此,就像可以構建一個調用Javac的目標一樣。 可以構建一個調用Java ..的目標,因此您可以構建一個測試目標並使用它執行所需的任何命令
如果構建了c ++可執行文件,則可以以相同的方式從makefile執行它。
test: mipsim
mipsim -v < test1.cmd > test1.log
關於將參數值從make文件傳遞到命令行的最后一個問題是什么意思? 使PARA1 = 1 PARA2 = ABC.c
您可以在makefile中使用參數。
test: mipsim
mipsim -v < $(INPUT_FILE) > $(OUTPUT_FILE)
快速評論您的問題。
全部:構建運行
build :(這是從您的java源代碼構建類文件)
運行:將您的Java命令行放在此處,例如“ java ...”
當您運行“ make”時,它將調用“全部”目標。 並且所有目標都將調用“ build”和“ run”目標,因此只需將一件事放在一個目標中並使用組合即可。
您的Java是使用輸入文件名作為參數還是來自stdin? 如果要獲取輸入文件名,則可以從傳遞給main(String [] args)的args參數中獲取它。
如果要從stdin讀取,則可以創建如下的bufferedreader。 BufferedReader br =新的BufferedReader(新的InputStreamReader(System.in));
希望能有所幫助。 (如果您喜歡此答案,請+1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.