如何制作一个合适的Java makefile?

时间:2013-05-21 00:27:50

标签: java makefile

我需要为Java项目创建一个makefile。

我的项目很基础。包含我的主文件和其他一些包的包。

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

1 个答案:

答案 0 :(得分: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 it执行查找操作以获取源文件列表时,这可能会导致一些延迟,具体取决于文件系统的数量和文件系统的速度....但是你说的是一个小的项目所以不应该是一个问题。

双patsubst可能会压缩成一个,但为了以防万一,我分两步完成。

另请注意,此解决方案分别编译每个Java类。这可能是非常昂贵的,并且建议另一个目标是通过创建包含所有src java文件的名称并将其传递给javac的文件来理想地一次编译。