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"
返回目录中的所有类文件时打印空白?
答案 0 :(得分: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*
规则本身中的all
在<{em> {/ 1>}和之前 touch
之后执行这两个文件都存在。