2014-10-17 59 views
0

我有大量的文件需要編譯,這些文件位於2個目錄中,我希望make可以自己找到這些文件。Java Makefile:如何動態編譯包內的文件

我在互聯網上找到的所有教程都顯示瞭如何在當前目錄中執行此操作,但不在其他目錄中。 這裏是我目前擁有的代碼:

JFLAGS = -g 
JC = javac 

# clear default targets 

.SUFFIXES: .java .class 

# compile files 

.java.class: 
    $(JC) $(JFLAGS) $*.java 

# directories to look for java files 

PACKAGES := \ 
    Core \ 
    Card \ 

# Initialize CLASSES with main.java 

CLASSES := main.java 

# I have no clue how this works, but someone told me to do it. 

.PHONY: default clean $(PACKAGES) 

# should add all java files to CLASSES 

$(PACKAGES): 
    $(eval CLASSES := $(CLASSES) [email protected]/*.java) 

# calls sources builder and compiler 

default: $(PACKAGES) classes 

# calls compiler for each file 

classes: $(CLASSES:.java=.class) 

clean: 
    $(foreach DIR,$(PACKAGES),$(eval $(RM $(DIR)/*.class))) 

正如你所看到的,我試圖通過迭代,並通過規則訪問目錄,但沒有這些方法的工作。

make clean給我nothing to be done for cleanmake給我nothing to be done for Core即使核心是充滿了Java文件,具有.class文件戰略地位。

我該如何解決這個問題?

我所用的基礎makefile文件可以在http://www.cs.swarthmore.edu/~newhall/unixhelp/javamakefiles.html

回答

0

找到我用貝殼找到查找文件:

JFLAGS = -g 
JC = javac 
.SUFFIXES: .java .class 

.java.class: 
    $(JC) $(JFLAGS) $*.java 

PACKAGES := \ 
    . \ 
    Core \ 
    Cards \ 
    Cards/Abstract \ 

CLASSES := $(shell find $(PACKAGES) -type f -name '*.java') 

.PHONY: default clean 

default: classes 

classes: $(CLASSES:.java=.class) 

clean: 
    $(RM) $(shell find $(PACKAGES) -type f -name '*.class')