You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:05:49