java - Makefile 运行多次

标签 java makefile

我正在尝试使用此 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/

相关文章:

c - 尝试 makefile 时出错?

linux - GNU Makefile 是否支持像 "path/{a, b}"这样的 shell 参数扩展?

makefile 将特定变量作为先决条件

c++ - 在 friendlyarm qtopia 错误上编译

java - 安卓 POI : crash when using autoSizeColumn()

Maven 中的 Javafx TableView : Incompatible types

java - 错误 SqlExceptionHelper - 整数值不正确

java - 使用一个 war 文件部署两个 glassfish 应用程序,在不同的数据库上运行

java - 使用 Java 关闭 Windows

c - gcc 错误 - ld : fatal: file shmonitor. o 错误的 ELF 类:ELFCLASS64