0

我需要为 Java 项目制作一个 makefile。

我的项目是基本的。一个包含我的主文件和其他一些包的包。

有人可以帮我为那种项目制作一个合适的makefile吗?

4

1 回答 1

0

对不起,我没有测试,所以它可能会失败......

假设您需要的是生成一个可执行的 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 来一次性编译另一个目标。

于 2013-05-21T01:49:45.740 回答