4

我在我的项目中创建了一个 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 类,但不执行我的运行命令。完成make文件并且不执行我的运行..为什么我的代码做错了?

4

2 回答 2

3

您需要将“运行”命令添加为“运行”目标的操作,而不是先决条件:

run : classes
        $(JVM) $(MAIN)
#make sure the line above begins with a tab
于 2013-09-18T19:53:04.500 回答
0

Make 只会尝试构建您的 makefile 中的第一个目标(以及该目标的所有先决条件,以及这些目标的所有先决条件等)。选择不同的或多个顶级目标(或“目标目标” ) 您可以在命令行上指定它们:make run.

您可以将run目标移动到 makefile 中的第一个目标,然后它将默认运行。

或者,如果您要运行多个“顶级”目标,则可以在另一个规则中收集它们;例如在上面你可以使用:

default: classes run

尽管按照长期惯例,这个目标被命名all(但这只是一个惯例)。

于 2013-09-18T18:30:51.093 回答