1
ALL_SRC := $(shell find . -name "*.java")
ALL_CLASS = $(shell find . -name "*.class")

all:
    @echo "Compiling..."
    $(JAVAC) $(ALL_SRC)
    echo $(ALL_CLASS)
    find . -name "*.class"

当运行此makefile 时存在类文件时,$(ALL_CLASS)正确设置。

返回目录中的所有类文件时如何echo $(ALL_CLASS)打印空白?find . -name "*.class"

4

1 回答 1

0

make如果类文件在开始运行时不存在,ALL_CLASS将设置为空白,因为它们在shell find运行时不存在。

但是,在编译完所有 Java 文件find,您的最后一行正在运行。

一个更简单的例子可能会有所帮助,让我们首先创建一个文件xyzzy1

touch xyzzy1

然后使用以下makefile,就创建和运行的时间而言,它与您的基本相同:

XYZZY=$(shell ls xyzzy*)
all:
    echo ===
    touch xyzzy2
    echo $(XYZZY)
    echo ===
    ls xyzzy*
    rm xyzzy2
    echo ===

当你运行make它时,你会看到:

===
xyzzy1
===
xyzzy1 xyzzy2
===

那是因为执行XYZZY=$(shell ls xyzzy*)发生all规则开始之前(所以还不xyzzy2存在)。

规则本身的ls xyzzy*内部在之后之前执行,因此这两个文件都存在。alltouchrm

于 2013-09-05T02:21:48.157 回答