make文件中的=和+ =有什么区别?

时间:2012-04-19 12:01:13

标签: linux unix makefile

以下陈述中有何不同之处?

 LDDIRS := -L$(ORACLE_LIB)
 LDDIRS += -L$(ORACLE_LIB)

7 个答案:

答案 0 :(得分:12)

  • :=(简单扩展变量)扫描值一次,全部展开任何
     定义变量时引用其他变量和函数。例如           x:=foo
              y:=$(x) bar
              x:=later
            所以上面相当于
               y:=foo bar
               x:=later

  • + =用于将更多文本附加到变量,例如
               objects=main.o foo.o bar.o
               objects+=new.o
     将对象设置为'main.o foo.o bar.o new.o'

  • =用于递归扩展变量。值为逐字安装;如果它包含  引用其他变量,只要这个变量是这些变量就会被扩展  这被称为递归扩展。

答案 1 :(得分:9)

" ="用于定义递归扩展变量。以下make文件将打印出来" y稍后是bar"

x = foo
y = $(x) bar
x = later

all:;echo "y is" $(y)

":="用于定义简单扩展变量,它一劳永逸地扩展。以下make文件将打印出来" y is foo bar"

x := foo
y := $(x) bar
x := later

all:;echo "y is" $(y)

另外,正如其他人之前指出的那样,您可以在GNU make手册的Using Variables部分获得更多详细信息。

希望这会有所帮助: - )

答案 2 :(得分:4)

:=将变量 here 定义为左侧,+=将右侧添加到变量的现有值。将:==进行比较,评估使用地点的右侧(而非此特定行)

您可以查看手册here(假设您使用的是GNU make)

答案 3 :(得分:2)

GNU Make has three assignment operators, ":=" , "=", "?=" and one "+=" for appending 
to the varibles.  

- ":=" performs immediate evaluation of the right-hand side and stores an actual   
  string into the left-hand side. 
  eg: 
  x:=foo
  y:=$(x) bar 
  x:=later
  so above is equivalent to
  y:=foo bar 
  x:=later

  test above example 
  x := foo 
  y := $(x) bar 
  x := later

  all:;echo "y is" $(y)

  output
  ------
  y is foo bar 

- "=" is like a formula definition; it stores the right-hand side in an 
  unevaluated form and then evaluates this form each time the left-hand 
  side is used.

  eg:
  x = foo
  y = $(x) bar
  x = later

  all:;echo "y is" $(y)

  output
  ------
  y is  later foo 
  • “?=”仅在未设置/没有值的情况下分配。 例如: KDIR?=“ foo” KDIR?=“ bar” 测试:     回声$(KDIR) 将显示“ foo”

    • “ + =”用于将更多文本附加到变量。 例如 objects = main.o foo.o bar.o objects + = new.o

      这会将对象设置为“ main.o foo.o bar.o new.o”

答案 4 :(得分:0)

来自This website

语法:= Link to place on page

  

简单扩展变量由使用':='的行定义(请参阅设置变量)。在定义变量时,一次性扫描简单扩展变量的值,并扩展对其他变量和函数的任何引用。简单扩展变量的实际值是扩展您编写的文本的结果。它不包含对其他变量的任何引用;它包含了定义此变量时的值。

语法+= Link to place on page

  

如果之前没有定义相关变量,'+ ='就像普通'='一样:它定义了一个递归扩展变量。但是,当存在先前的定义时,'+ ='的确切取决于您最初定义的变量的类型。有关两种变量的解释,请参见变量的两种风格。

答案 5 :(得分:0)

:=会将值设置为变量一次,即每次都不会重新评估变量。编译代码时可以在性能上产生巨大的差异。

+=只会为变量添加一个值。

答案 6 :(得分:-3)

:=用于分配,方式与=相同。

+=为变量添加新值。