我对“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.
注在这里它说:“没有规则制定目标'(查找)'”,好像该参数尚未扩展。 (我也试图让变量简单地扩展,“b:=$$(...)
”,但这没有改变)。
我希望有人有这方面的知识来详细说明,这对我来说似乎是一个微妙的差异,但可能比我目前能够理解的要深刻得多。
谢谢你的回答,这个例子非常好。我必须承认,扩展变量对我来说一直有点神奇。 –