20

以下陈述的工作区别是什么?

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

7 回答 7

19
  • := (Simply Expanded Variable) 当变量被定义时,该值被扫描一次并且所有扩展
    对其他变量和函数的任何引用。例如 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'

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

于 2012-10-09T10:17:12.687 回答
18

“=”用于定义递归扩展变量。下面的make文件会打印出“y is later 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 手册的使用变量部分中获得更多详细信息。

希望这可以帮助 :-)

于 2014-04-30T02:52:42.407 回答
6

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

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

于 2012-04-19T12:04:04.967 回答
5
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" 测试: echo $(KDIR) 将打印 "foo"

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

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

于 2018-12-27T08:13:24.227 回答
0

这个网站

用于放置在页面上的语法链接:=

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

用于放置在页面上的语法链接+=

当所讨论的变量以前没有定义过时,'+=' 的作用就像普通的 '=':它定义了一个递归扩展的变量。但是,当有先前的定义时,'+=' 的确切作用取决于您最初定义的变量的风格。有关两种变量的解释,请参阅变量的两种形式。

于 2012-04-19T12:06:30.007 回答
0

将为:=变量设置一次值,即每次使遇到该变量时都不会重新评估它。编译代码时可以对性能产生巨大影响。

+=将简单地将一个值添加到变量中。

于 2012-04-19T12:07:15.897 回答
-3

用于赋值,:=方式与 相同=

+=为变量添加一个新值。

于 2012-04-19T12:04:44.010 回答