我在项目中创建了一个makefile。
JFLAGS = -g
JC = javac
JVM= $(JAVA_HOME)/bin/java
.SUFFIXES: .java .class
.java.class: ; $(JC) $(JFLAGS) $*.java
CLASSES = \
Class1.java \
Class2.java \
Main.java
MAIN = Main
default: classes
classes: $(CLASSES:.java=.class)
run : classes $(JVM) $(MAIN).class
下面的代码运行并编译我的java类但不执行我的run命令。 完成make文件并且不执行我的运行.. 为什么我的代码出错?
答案 0 :(得分:3)
您需要将“run”命令添加为“run”目标的操作,而不是先决条件:
run : classes
$(JVM) $(MAIN)
#make sure the line above begins with a tab
答案 1 :(得分:0)
Make只会尝试在makefile中构建第一个目标(以及该目标的所有先决条件,以及这些目标的所有先决条件等)。选择不同的或多个顶级目标(或“目标目标“)您可以在命令行上指定它们:make run
。
您可以将run
目标移动到makefile中的第一个目标,然后默认运行它。
或者,如果您要运行多个“顶级”目标,则可以在另一个规则中收集它们;例如,在上面你可以使用:
default: classes run
虽然通过长期惯例,这个目标被命名为all
(但这只是一个惯例)。