我在堆栈溢出中的第一个问题......有点兴奋,但仍在努力解决这个问题。
好的,我的问题是如何通过makefile将参数从命令行传递到java程序。
老实说我真的不知道我的描述是否正确.......因为我对makefile并不是很了解...在我的作业中,描述是我们必须为GNU开发一个Makefile制作我们的计划。例如,命令行
制作
mipsim -v< test1.cmd> test1.log
将构建ISS(我们制作的模拟器),然后使用调试输出运行它,从文件test1.cmd获取输入命令并将结果写入test1.log。
我已完成该计划,但我不知道如何使上述事情发生。 到目前为止我所知道的只是使用makefile从.java文件制作.class文件.... 我不知道如何将test1.cmd作为输入文件的名称,将test1.log作为输出 命令行中的文件名....我想这两个名字可能会通过主函数中的String [] args进入我的程序......
请问有人给我一些帮助吗?
谢谢
答案 0 :(得分:1)
对这些问题存在一些困惑。
首先,使用make编译Java有点...... iffy。 (大多数人使用蚂蚁或专家。)但是,如果你不介意一点开销,你可以使用make来做。您可能应该从Java包层次结构的根目录运行make。您可以使用make macros确定下面的所有Java文件。提示:shell:
JAVA_FILES = $(shell find -name \*.java)
然后你运行javac。 (确保使用make宏为编译器等定义所有路径名。)使用Java,导出make目标并不容易,因为.class文件不是1:1 w.r.t. java文件。我只是使用目标"编译",取决于所有java文件,并触摸充当虚拟目标的文件。
第二,执行。要调用不在可执行jar中的Java程序,请设置classpath(选项-cp),指定主类名并添加命令行参数。我必须知道" mipsim"是 - 可能是一个shell脚本来做这件事。无论如何,make目标可以是日志文件:
%.log : %.cmd
${JAVA_HOME}/bin/java -cp ${ROOT} <$< >$@
现在,make test1.cmd
应该运行您的程序。
注意:程序参数不指定重定向;这是由shell处理的。
答案 1 :(得分:0)
有一堆无关的问题......
您要显示的语法:
mipsim -v < test1.cmd > test1.log
会调用可执行文件mipsim。将“-v”传递给args [1]。将test1.cmd重定向为standrad输入,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)
答案 2 :(得分:0)
快速评论您的问题。
all:build run
构建: (这是从你的java源代码构建类文件)
运行: 把你的java命令行放在这里&#34; java ...&#34;
当您运行&#34; make&#34;时,它将调用&#34; all&#34;目标。所有目标都会调用&#34; build&#34;并且&#34;运行&#34;目标,所以只需将一个东西放在一个目标中并使用这些组合。
你的java是输入文件名作为参数还是从stdin? 如果你想获取输入文件名,那么你可以从传递给你的main(String [] args)的args参数中获取它。
如果你想从stdin读取,那么你可以创建一个bufferedreader,如下所示。 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
希望这有帮助。 (欢迎+1,如果你喜欢这个答案)