我在看另一个stack overflow question,以及他们使用,看起来是无证行为的makefile ......如果我有下面的Makefile:设置与EVAL变量的Makefile配方
X=X
all:
@echo [email protected]: $(X)
$(eval X=Y)
@echo [email protected] part2: $(X)
all2:
@echo [email protected]: $(X)
然后我跑:
~> make all2
all2: X
~> make all all2
running all
all: X
all part2: Y
all2: Y
我本来期望的$(eval X=Y)
在Makefile来扩大解析时间,并设置壳变量X
是Y
该行的RECIP的e(即没做什么)。相反,似乎在all
配方运行时进行评估,并且似乎设置了make变量。我已经浏览了make man页面和在线手册,但是我找不到任何描述这种行为的东西(我正在使用GNU Make 4.0)。有人可以给我一些文档描述,或解释发生了什么?
您可能在这里找到更多的信息:http://stackoverflow.com/questions/38224102/make-define-multiple-variables-in-the-same-eval-call。 基本上,正如在GNU make文档中所说的那样,它是在调用时评估的Makefile语法部分,因此它仍然是一个Makefile变量,实际上,它在目标“all”中进行评估。这里是'eval'文档:https://www.gnu.org/software/make/manual/html_node/Eval-Function.html – Tim