簡體   English   中英

Makefile with Jar和Package Dependencies

[英]Makefile with Jar and Package Dependencies

我一直在努力讓這件事情發揮作用。 基本上我需要創建一個makefile來從源代碼構建我的項目。 我對Linux有點了解,但並不多,我是一個完整的makefile新手。

我已經嘗試了來自網絡的大量示例,並且都抱怨他們缺少依賴項。 其他人建議使用Ant或Mavern,但這不可能是精確的手部通知:

引自規范

您的提交應包含適用於Linux系統的單個文件comp2010.tar。 這必須包含文件Makefile和所有源。 你不應該交任何.class文件。 您的Makefile必須從Java源代碼構建工具。 主要類必須稱為Blaise。 簡而言之,(自動)測試過程將包括:

tar xf comp2010.tar

make

java Blaise < test.file > testout 2> testerr

這些命令將在使用Java 1.6的標准部門教學Linux環境中的空目錄中執行。 CLASSPATH將包含版本3.2的ANTLR jar。

注意:請確保您的提交可以在標准部門機器上編譯和執行。 請確保使用正確版本的Java,並且不使用絕對路徑。 如果您使用任何外部庫,則還需要提交這些庫。

所以你看我無法設置任何環境變量,因為運行它的機器不是我的,我不允許管理訪問。 我無法提交任何類文件,因此makefile不適合我,而Ant / Mavern腳本將無法工作,因為測試過程是自動化的並使用此makefile,我允許提交的所有文件都是.java文件。 所以我需要構建一個makefile,沒有辦法解決這個問題。

源結構如下:

SRC \\包1 *的.java

SRC \\包2 *的.java

自動生成\\程序包A *的.java

要編譯的東西需要所有3個文件夾中的源文件。 Main()方法位於src \\ Package1 \\ 1.java中

這些目錄中的每一個都是Eclipse中的一個包,這三個包依賴於彼此以及外部Jar文件antlr-3.2.jar


那么如何制作這個makefile。 這是我的問題,我在下面提供了自己的嘗試:


JAVAC = javac
CLASS_FILES = src/package1/1.class auto-generated/packageA/2.class auto-generated/packageA/3.class auto-generated/packageA/4.class src/Package2/5.class src/Package2/6.class src/Package2/7.class src/Package2/8.class src/Package2/9.class src/Package2/10.class src/Package2/11.class src/Package2/12.class antlr-3.2.jar.*

Default: $(CLASS_FILES)

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

clean: $(RM) *.class

這失敗了,例如“org.antlr.runtime不存在”,這是在antlr-3.2.jar中。 我在我的智慧結束,很快就需要交出來。 我假設我只是簡單地導入了jar,也許我需要使用CLASSPATH。 我很抱歉,如果這是一個簡單的問題,但我現在已經嘗試了6個小時制作其中一個。 你能給予的任何幫助都將非常感激。

親切的問候Feldoh

我在這里可以看到一些問題:

  • 如上所述,您需要在tar文件的根目錄中的默認包中設置Blaise類
  • 您使用的任何軟件包也應該直接存在於根目錄下,而不是存在於源子目錄中(因為Java / Javac將無法在那里找到它們)
  • make是特定的wrt,您可以在其中使用空格和制表符
  • 你的makefile不使用javac命令的選項
  • 您嘗試為哪個make版本構建makefile? 我知道的版本會采用以下格式:

     JAVAC = javac JAVACFLAGS = SRC= Blaise.java \\ package1/1.java \\ packageA/2.java CLS= $(SRC:.java=.class) all: $(CLS) .SUFFIXES : .class .java .java.class : $(JAVAC) $(JAVACFLAGS) $< 

如果使用不包含當前目錄的類路徑,請確保指定源路徑。

JAVAC = javac
CLASS_FILES = src/package1/1.class auto-generated/packageA/2.class auto-generated/packageA/3.class auto-generated/packageA/4.class src/Package2/5.class src/Package2/6.class src/Package2/7.class src/Package2/8.class src/Package2/9.class src/Package2/10.class src/Package2/11.class src/Package2/12.class

CLASSPATH = antlr-3.2.jar
SOURCEPATH = .

Default: $(CLASS_FILES)

%.class: %.java
    $(JAVAC) -classpath $(CLASSPATH) -sourcepath $(SOURCEPATH) $<

clean: $(RM) *.class

另一種方法是使用包含當前目錄的類路徑(因為在沒有提供源路徑時使用類路徑):

CLASSPATH = .:antlr-3.2.jar

%.class: %.java
    $(JAVAC) -classpath $(CLASSPATH) $<

(其余如上)

當然,您也可以將選項添加到JAVAC變量中。

通過將antlr添加到類路徑來修復您的javac調用。 我真的很鄙視我的CS教授使用的自動標記腳本。 他們根據提交負載隨機失敗。 是Java和Makefiles的一個很好的介紹。 基本上嘗試為.java和.class文件添加glob。 使用JFLAGS在類路徑中傳遞antlr。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM