我需要为 Java 项目制作一个 makefile。
我的项目是基本的。一个包含我的主文件和其他一些包的包。
有人可以帮我为那种项目制作一个合适的makefile吗?
对不起,我没有测试,所以它可能会失败......
假设您需要的是生成一个可执行的 jar 文件,以下应该可以工作,但我还没有测试过。
下面的 Makefile 假定您的源位于 ./src 下,并且您乐于将 ./build 用于中间文件(干净的目标完全消除了这些文件,所以要小心)。
然后'make'或'make jar'应该生成jar文件。
NAME=MyProject
MAIN_CLASS=MyMainClass
SRC_DIR=./src
CLS_DIR=./build/classes
MANIFEST_FILE=./build/META-INF.MF
JAR_FILE=./$(NAME).jar
SRC_FILES=$(shell find $(SRC_DIR) -iname "*.java")
CLS_FILES=$(patsubst $(SRC_DIR)/%,$(CLS_DIR)/%,$(patsubst %.java,%.class,$(SRC_FILES)))
.PHONY: jar run clean mrproper
jar : $(JAR_FILE)
run : $(JAR_FILE)
java -jar $(JAR_FILE)
$(JAR_FILE) : $(MANIFEST_FILE) $(CLS_FILES)
jar cmf $< $@ $(CLS_DIR)
$(MANIFEST_FILE) :
mkdir -p $(dir $@)
echo Main-Class: $(MAIN_CLASS) > $@
$(CLS_DIR) :
mkdir -p $(CLS_DIR)
$(CLS_DIR)/%.class : $(SRC_DIR)/%.java $(CLS_DIR)
javac -d $(CLS_DIR) -sourcepath $(SRC_DIR) $<
clean :
rm -Rf ./build
mrproper : clean
rm -f $(JAR_FILE)
每次执行 Make 它都会执行查找操作以获取源文件列表,这可能会导致一些延迟,具体取决于文件数量和文件系统的速度......但你说的是一个小项目,所以它不应该是一个问题。
双 patsubst 很可能被压缩成一个,但为了以防万一,我分两步完成了。
另请注意,此解决方案单独编译每个 Java 类。这可能会非常昂贵,并且最好通过创建一个包含所有 src java 文件名称的文件并将其传递给 javac 来一次性编译另一个目标。