【问题标题】:Creating a Makefile for jar executable为 jar 可执行文件创建 Makefile
【发布时间】:2014-09-09 01:43:26
【问题描述】:

我目前正在使用以下 Makefile:

    JAVAC=javac
    sources = $(wildcard *.java)
    classes = $(sources:.java=.class)

    all: myProgram

    myProgram: $(classes)

    clean :
        rm -f *.class

    %.class : %.java
        $(JAVAC) $<

myProgram 最初只是一个 .java 文件,但我已将其替换为 .jar 可执行文件。我本质上仍然只是希望能够做一些简单的事情,例如:

    make myProgram

如何修改我的 Makefile 来完成这个?感谢您的任何意见/建议。

【问题讨论】:

    标签: java command-line jar makefile


    【解决方案1】:

    只需添加一个新目标(例如“jar”),然后给它适当的“jar”命令

    示例:

    JAVAC=javac
    sources = $(wildcard *.java)
    classes = $(sources:.java=.class)
    
    all: myProgram
    
    myProgram: $(classes)
    
    clean :
        rm -f *.class
    
    %.class : %.java
        $(JAVAC) $<
    
    jar: $(classes)
        jar cvf myjarfile.jar $(classes) 
    

    您可以通过多种方式“调整”此示例。例如,您可能想要参数化“jar”命令(例如JAR=jar),您可能想要创建清单(也许让 makefile 本身使用适当的“echo”命令即时创建清单)等.等等

    这里是“jar”的 Oracle 文档:

    http://docs.oracle.com/javase/tutorial/deployment/jar/build.html

    【讨论】:

    • jar 声明为.PHONY 并让它依赖于输出myjarfile.jar 文件,然后为该文件添加一个依赖于$(classes) 的目标。这是更好的一般做法。
    【解决方案2】:

    上面的代码在这里对我不起作用,我对清单文件进行了一些更改:

    JAVAC=javac
    sources = $(wildcard *.java)
    classes = $(sources:.java=.class)
    
    all: myProgram
    
    myProgram: $(classes)
    
    %.class: %.java
        $(JAVAC) $<
    
    jar:    
        @echo "Manifest-Version: 1.0" > manifest.txt
        @echo "Class-Path: ." >> manifest.txt
        @echo "Main-Class: Main" >> manifest.txt
        @echo "" >> manifest.txt
    
        jar -cmf manifest.txt JARNAME.jar $(classes)
    
    clean:
        rm -f *.class
        rm manifest.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多