关于Makefile变量与Shell变量的疑问:为何输出不符合预期?
问题原因
Makefile里的${aaa}是Make在解析规则阶段就会展开,不是等到shell执行命令的时候才替换。
看你的代码:
aaa := outer all: @aaa=inner; echo ${aaa} @echo ${aaa}
当Make处理这个规则时,会先把所有${aaa}替换成它的Make变量值outer,所以实际传给shell执行的命令是:
aaa=inner; echo outer echo outer
自然输出就是outer outer了。
解决办法
如果你想让shell变量生效,得让shell来处理变量引用,而不是Make。可以把${aaa}改成$$aaa(Make会把$$转义成单个$,shell执行时就变成$aaa):
aaa := outer all: @aaa=inner; echo $$aaa @echo ${aaa}
这样第一条命令shell执行的是aaa=inner; echo $aaa,输出inner,第二条命令Make展开后是echo outer,输出outer,就能得到你预期的inner outer。
内容的提问来源于stack exchange,提问作者Divlaker
相关产品推荐
相关产品推荐

