我对“
输出如下:
请注意这里说的是“没有规则可以制作目标'$(find)'”,好像参数还没有被展开。(我也尝试让变量简单地展开,“
我希望有人能详细说明这一点,对我来说似乎是一个微妙的差别,但可能比我现在能够理解的要深刻得多。
shell
”MAKE函数和“$$
”之间的差异感到困惑。在文档中,我找到了以下内容:
我认为这正是"$ $"所做的事情,但在这个小例子中:shell函数 接受一个单一的参数,该参数会被扩展(像所有参数一样),并传递给子shell执行。然后读取命令的标准输出,并将其作为函数值返回。
a = $(shell find . -maxdepth 1 -type f -name "Makefile")
b = $$(find . -maxdepth 1 -type f -name "Makefile")
.PHONY: all A B
all: A B
A: $(a)
@echo "Target: $(@)"
@echo "Prereq: $(<)"
@echo "Var a: $(a)"
@echo "Var b: $(b)"
B: $(b)
@echo "Target: $(@)"
@echo "Prereq: $(<)"
@echo "Var a: $(a)"
@echo "Var b: $(b)"
输出如下:
Target: A
Prereq: Makefile
Var a: ./Makefile
Var b: ./Makefile
make: *** No rule to make target '$(find)', needed by 'B'. Stop.
请注意这里说的是“没有规则可以制作目标'$(find)'”,好像参数还没有被展开。(我也尝试让变量简单地展开,“
b:=$$(...)
”,但是这并没有改变什么)。我希望有人能详细说明这一点,对我来说似乎是一个微妙的差别,但可能比我现在能够理解的要深刻得多。