我正在尝试使用此 Makefile 编译我的 Java 代码。然而,当我运行 make 时,它会多次编译代码。
生成文件:
.PHONY: all clean run
SOURCES = \
Models/CustomException \
Models/Forest \
Models/ForestContainer \
Models/Owner \
Models/OwnerContainer \
Models/Tree
SRC = $(addprefix src/, $(addsuffix .java, $(SOURCES)))
BIN = $(addprefix bin/, $(addsuffix .class, $(SOURCES)))
all: ${BIN}
clean:
-rm -f ${BIN};
${BIN}: ${SRC}
mkdir -p bin/Controllers;
mkdir -p bin/Models;
mkdir -p bin/Views;
javac -d bin ${SRC};
run: all
java -cp bin Program;
输出:
┌─( klim ) - ( ~/workspace/Forest-mvc )
└─> make
mkdir -p bin/Controllers;
mkdir -p bin/Models;
mkdir -p bin/Views;
javac -d bin src/Models/CustomException.java src/Models/Forest.java src/Models/ForestContainer.java src/Models/Owner.java src/Models/OwnerContainer.java src/Models/Tree.java;
mkdir -p bin/Controllers;
mkdir -p bin/Models;
mkdir -p bin/Views;
javac -d bin src/Models/CustomException.java src/Models/Forest.java src/Models/ForestContainer.java src/Models/Owner.java src/Models/OwnerContainer.java src/Models/Tree.java;
mkdir -p bin/Controllers;
mkdir -p bin/Models;
mkdir -p bin/Views;
javac -d bin src/Models/CustomException.java src/Models/Forest.java src/Models/ForestContainer.java src/Models/Owner.java src/Models/OwnerContainer.java src/Models/Tree.java;
mkdir -p bin/Controllers;
mkdir -p bin/Models;
mkdir -p bin/Views;
javac -d bin src/Models/CustomException.java src/Models/Forest.java src/Models/ForestContainer.java src/Models/Owner.java src/Models/OwnerContainer.java src/Models/Tree.java;
mkdir -p bin/Controllers;
mkdir -p bin/Models;
mkdir -p bin/Views;
javac -d bin src/Models/CustomException.java src/Models/Forest.java src/Models/ForestContainer.java src/Models/Owner.java src/Models/OwnerContainer.java src/Models/Tree.java;
mkdir -p bin/Controllers;
mkdir -p bin/Models;
mkdir -p bin/Views;
javac -d bin src/Models/CustomException.java src/Models/Forest.java src/Models/ForestContainer.java src/Models/Owner.java src/Models/OwnerContainer.java src/Models/Tree.java;
正如您所看到的,它多次运行命令,实际上是 6 次。随着源数量的添加/删除,运行命令的次数会增加/减少
怎么会这样?
最佳答案
只需在javac后面添加主类即可。
${BIN}: ${SRC}
javac -d bin -cp . Models/Tree.java
所有类以及依赖于主类的文件夹(包)都会被自动编译。你的 make 正在一次又一次地编译一些已经编译过的类。
关于java - Makefile 运行多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12286464/