如何解决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
相关产品推荐
相关产品推荐

