2014-10-17 52 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')