makefile中 = ,:=,+=有怎么区别?

如题所述

  = 是最基本的赋值
  := 是覆盖之前的值
  ?= 是如果没有被赋值过就赋予等号后面的值
  += 是添加等号后面的值
  1、“=”
  make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:
  x = foo
y = $(x) bar
x = xyz
  在上例中,y的值将会是 xyz bar ,而不是 foo bar 。
  2、“:=”
  “:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。
  x := foo
y := $(x) bar
x := xyz
  在上例中,y的值将会是 foo bar ,而不是 xyz bar 了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-14
+= 是添加(append).
path=a
path+=b
echo $(path) --> a b

=, 和:=的区别在于make什么时候展开后面的变量, VAR=$(variable), =展开$(variable)一次,:=在每次用的时候都会展开。

具体看:
http://www.gnu.org/software/make/manual/make.html

Section 3.7 How make Reads a Makefile本回答被提问者采纳
相似回答