1 变量:
1.1 递归展开式变量
foo =
(bar)bar=
(
b
a
r
)
b
a
r
=
(ugh)
ugh = Huh?
all:;echo
(foo)替换过程:首先
(
f
o
o
)
替
换
过
程
:
首
先
(foo)被替换为“
(bar)”,接下来“
(
b
a
r
)
”
,
接
下
来
“
(bar)”被替换为“
(ugh)”,最后“
(
u
g
h
)
”
,
最
后
“
(ugh)”被替换为“Hug?”。整个替换的过程是在执行“echo $(foo)”是进行的。
优点:这种类型变量的定义时,可以引用其它的之前没有定义的变量(可能在后续部分定义,或者是通过make的命令行选项传递的变量)
缺点:
1)可能会由于出现变量的递归定义而导致make陷入到无限的变量展开过程中,最终使make执行失败;
2)这种风格变量的定义中如果使引用了某一个函数,那么函数总会在其被引用的地方被执行;
1.2 直接展开式变量
x := foo
y := $(x) bar
x := later
就等价于:
y := foo bar
x := later
注意:递归展开式与直接展开式在语法上表达,仅赋值操作符不一致。前者用”=”,后者用”:=”。
2 引用shell命令:
3 shell调试:
4 其它
.PHONY修饰的目标就是只有规则没有依赖。