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

如何解决Makefile报错:No rule to make target 'Edge.class'

问题分析与解决

你的Makefile后缀规则写法错误,导致Make无法找到生成.class文件的有效规则,才会报“No rule to make target 'Edge.class'”的错误。

错误原因

原规则:

.java.class: $(JC) $*.java

这行代码会被Make解析为:生成.class文件需要依赖javac程序和对应的.java文件,但javac不是本地存在的目标文件,Make找不到生成它的规则,因此报错。

修正后的Makefile

JC = javac
.SUFFIXES: .java .class

.java.class:
	$(JC) $<

CLASSES = \
   Edge.java \
   GraphGenerator.java \
   item.java \
   JavaQuest.java \
   mapa.java \
   Nodo.java \
   nodoCombate.java \
   nodoEvento.java \
   nodoInicial.java \
   nodoJefeFinal.java \
   nodoTienda.java \
   Personaje.java

default: classes

classes: $(CLASSES:.java=.class)

clean:
	$(RM) *.class

关键修正点

  • 将编译命令单独放在规则下一行,且必须用Tab键开头(Make要求规则的命令行必须以Tab开头)
  • 使用$<指代当前规则的依赖文件(即对应的.java文件),替代原来的$*.java,写法更规范。

可选优化:使用模式规则

你也可以用更易读的模式规则替代后缀规则,效果完全相同:

JC = javac

%.class: %.java
	$(JC) $<

CLASSES = \
   Edge.java \
   GraphGenerator.java \
   item.java \
   JavaQuest.java \
   mapa.java \
   Nodo.java \
   nodoCombate.java \
   nodoEvento.java \
   nodoInicial.java \
   nodoJefeFinal.java \
   nodoTienda.java \
   Personaje.java

default: classes

classes: $(CLASSES:.java=.class)

clean:
	$(RM) *.class

内容的提问来源于stack exchange,提问作者xXpyXx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:40:37