簡體   English   中英

如何通過makefile將參數從命令行傳遞到Java程序

[英]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)

快速評論您的問題。

您的makefile需要2個目標。 一個用於構建,另一個用於運行。

全部:構建運行

build :(這是從您的java源代碼構建類文件)

運行:將您的Java命令行放在此處,例如“ java ...”

當您運行“ make”時,它將調用“全部”目標。 並且所有目標都將調用“ build”和“ run”目標,因此只需將一件事放在一個目標中並使用組合即可。

您的Java代碼。

您的Java是使用輸入文件名作為參數還是來自stdin? 如果要獲取輸入文件名,則可以從傳遞給main(String [] args)的args參數中獲取它。

如果要從stdin讀取,則可以創建如下的bufferedreader。 BufferedReader br =新的BufferedReader(新的InputStreamReader(System.in));

希望能有所幫助。 (如果您喜歡此答案,請+1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM