Java Makefile:如何在包内动态编译文件



我有很多文件需要编译,这些文件位于2个目录中,我想自己找到这些文件。

我在互联网上找到的所有教程都展示了如何在当前目录中做到这一点,而不是在其他目录中。这是我目前拥有的代码:

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) $@/*.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,尽管Core中充满了java文件,并且战略性地放置了.class文件。

我该怎么解决这个问题?

我使用的基本makefile可以在http://www.cs.swarthmore.edu/~newhall/unixhelp/javamakefiles.html

我使用shell查找文件:

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')

最新更新