[英]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
我在這里可以看到一些問題:
您嘗試為哪個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
變量中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.