Java Makefile如何传入命令行参数?make命令仅编译还是执行程序?
问题解答
现有Makefile的执行行为
你当前的Makefile,在命令行输入make后,只会编译Java文件生成.class字节码文件,不会执行你的程序。因为默认目标default指向classes,而classes目标仅完成编译动作。
修改Makefile支持传递参数并执行程序
要让Makefile支持接收命令行参数并运行程序,你需要添加一个专门的run目标,通过变量来传递参数。修改后的Makefile如下:
JFLAGS = -g JC = javac JR = java .SUFFIXES: .java .class .java.class: $(JC) $(JFLAGS) $*.java CLASSES = \ AVLTree.java default: classes classes: $(CLASSES:.java=.class) # 添加run目标,用于执行程序,ARGS用于接收命令行参数 run: classes $(JR) AVLTree $(ARGS) clean: $(RM) *.class
使用方式
- 编译并执行程序(传递inputs.txt作为参数):
make run ARGS=inputs.txt - 如果需要传递多个参数,直接在ARGS后拼接即可:
make run ARGS="input1.txt input2.txt"
注意事项
- Java对类名大小写敏感,确保你的源文件名
AVLTree.java和类名AVLTree完全一致(你原来的执行命令写的是java AvlTree.java,这里要注意大小写匹配,避免运行时报找不到类的错误)。 - 如果你希望输入
make就直接执行程序,可以把default目标改成run,替换原来的default: classes为default: run,这样输入make ARGS=inputs.txt就能直接编译并运行。
内容的提问来源于stack exchange,提问作者Rishab Parmar
相关产品推荐
相关产品推荐

