LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1036|回复: 5

请问makefile里=和:=有啥区别?

[复制链接]
发表于 2006-2-18 22:33:32 | 显示全部楼层 |阅读模式
好像make可以自动识别实际用的哪个吧
发表于 2006-2-19 01:37:18 | 显示全部楼层
前者判断是否等于,后者赋值用
按经验猜的~~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-19 09:43:14 | 显示全部楼层
赋值时好像两个都可以用。
回复 支持 反对

使用道具 举报

发表于 2006-2-19 10:46:09 | 显示全部楼层
我来说两句,

= 是 recursively 赋值,
:= 是 simply 赋值。

举个 = 的例子:

foo = $(bar)
bar = $(ugh)
ugh = Huh?

foo 的值是 ‘Huh?’.

如果把上面例子的 = 换成 :=, foo 的值则变成了 ‘空’,因为在执行第一句时 bar 还没有定义,后面的两句话就跟 foo 没关系了。

(这个地方我没解释清楚,大家慢慢分析例子吧。)

注意下面的例子:

假设 CFLAGS 已经有了定义,然后我们要追加一个选项,如果写成:
CFLAGS = $(CFLAGS) -g
是错的,这是一个 recursive 死循环,最终堆栈溢出。
正确的写法应该是:
CFLAGS := $(CFLAGS) -g


我只知道这么多了,呵呵。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-19 13:16:08 | 显示全部楼层
看来都用:=算了,安全
回复 支持 反对

使用道具 举报

发表于 2006-2-19 23:32:41 | 显示全部楼层
Post by pink_tulip
看来都用:=算了,安全


有时候 = 也用得到。= 可以用来定义表达式,或者说方程式, 某种依赖关系。
举一个简单的例子,例如我要计算立方体的体积:

cube = $(length) * $(length) * $(length)

这样以后 length 改变了,cube 也跟着变了。

----------------------------------------
有说的不对的地方,请大家指教。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表