规则
伪目标
变量
变量定义的3种方式
1 foo = bar (递归展开式变量)
会在引用$(foo)地方原地替换,直到不能再替换,这种方式称之为递归展开式变量1
2
3
4foo = $(bar)
bar = $(ugh)
ugh = Huh?
all @echo $(foo)以上例子会在@echo $(foo) 地方递归展开
缺点一 : 是当嵌套定义foo = $(foo) bar
时讲进入死循环,导致Make失败
其他例子
x = $(y)
y = $(x) $(z)
同样会陷入死循环,所以这种定义方法只推荐在不引用变量的时候应用
缺点二 这种定义中如果使用函数,只会在变量被引用时展开,而不是在定义时展开
会使得Make的效率降低,另外有可能会在变量函数的引用会出现非预期结果,特别当变量
定义引用到shell wildcard 函数的情况下,出现不可控的结果1
2
3
4
5
6x = foo
y = $(x) bar //$(x) 不会被立即替换,只有在$(y)被用到的地方才用x的值替换
x = later //将会覆盖 原来的 x ,
等价于
y = later bar
x = later