gpt4 book ai didi

java - Makefile:$(shell find ...) 未输出正确的结果

转载 作者:行者123 更新时间:2023-12-01 04:24:33 25 4
gpt4 key购买 nike

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" 返回目录中的所有类文件?

最佳答案

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

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

一个更简单的示例可能会有所帮助,让我们首先创建一个文件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 尚不存在)。

all 规则本身中的 ls xyzzy*touch之后和之前执行 rm,因此两个文件此时都存在。

关于java - Makefile:$(shell find ...) 未输出正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18626692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com