日期:2014-05-16  浏览次数:20806 次

make中的目标变量
请问如果我这样定义AMSN变量   ,那么是不是应该会作为目标变量.   可以输出全是msn
请目标变量倒底应该怎么用..谢谢@@@
file:   Makefile
a:kk
AMSN=msn
foo1:k1
foo1:AMSN+=foo1
foo2:k2
foo2:AMSN+=foo2

k1:
                @echo   "${AMSN} "
k2:          
                @echo   "${AMSN} "
kk:k1   k2
                @echo   "${AMSN} "

------解决方案--------------------
把Makefile修改为
a:kk
AMSN=msn
foo1:k1
foo1:AMSN+=foo1
foo2:k2
foo2:AMSN+=foo2

k1:
@echo "${AMSN} "
k2:
@echo "${AMSN} "
#这里修改了 kk:k1 k2
kk:foo1 foo2
@echo "${AMSN} "

就可以看到你要的效果了.

"目标指定的变量值只在指定它的目标的上下文中有效,对于其他的目标没有影响。就是说目标指定的变量具有只对此目标上下文有效的“局部性”。 "

因此,foo1:k1 只对foo1为目标及以foo1为以来的下文中有效。

原Makefile中 kk:k1 k2 直接以k1,k2为目标,不属于foo1的上下文,因此目标变量没有生效。