makefile中定义了一个变量,但Make会忽略它。为什么?
从: 目标特定变量还有一个特殊特性:定义目标特定变量时,该变量值对该目标的所有先决条件及其所有先决条件都有效(除非这些先决条件使用其自身的目标特定变量值覆盖该变量) 因此,给定一个makefile:makefile中定义了一个变量,但Make会忽略它。为什么?,makefile,Makefile,从: 目标特定变量还有一个特殊特性:定义目标特定变量时,该变量值对该目标的所有先决条件及其所有先决条件都有效(除非这些先决条件使用其自身的目标特定变量值覆盖该变量) 因此,给定一个makefile: $(壳牌rm-rf x D) $(shell mkdir D) $(shell touch D/x) VPATH=D 全部:x; x:: @回音“foo is:$(foo)” .无声:D/x 全部:foo=bar 跑步,我得到: foo是: 我想,我在上面定义了:foo=bar 或者,是吗?事实
$(壳牌rm-rf x D)
$(shell mkdir D)
$(shell touch D/x)
VPATH=D
全部:x;
x::
@回音“foo is:$(foo)”
.无声:D/x
全部:foo=bar
跑步,我得到:
foo是:
我想,我在上面定义了:foo=bar
或者,是吗?事实上,你和,和 您的
Makefile
可以解释为:
是第一个目标all
都有一个先决条件:所有
x
- 由于
是VPATH
,D
所有的
都有一个间接的先决条件:
D/x
目标处于静默状态D/x
和所有这些先决条件都有一个目标特定变量all
等于foo
bar
D/x
交互测试:在
Makefile
的末尾添加x:foo=bar
,然后make
过程将被卡住
变通办法:
.SILENT
行(我在一些测试后发现了这一点,它也解决了上述问题…)Makefile
的末尾添加D/x:foo=bar
,为D/x
目标明确添加foo
变量