以下陈述的工作区别是什么?
LDDIRS := -L$(ORACLE_LIB)
LDDIRS += -L$(ORACLE_LIB)
:= (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'
= 用于递归扩展变量。值是逐字安装;如果它包含对其他变量的引用,则只要替换此变量,就会扩展这些变量。这称为递归扩展。
“=”用于定义递归扩展变量。下面的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 手册的使用变量部分中获得更多详细信息。
希望这可以帮助 :-)
:=
将此处的变量定义为左侧,+=
将右侧添加到变量的现有值。:=
与=
which 在使用地点评估右侧(而不是在此特定行中)进行比较
您可以在此处查看手册(假设您使用的是 GNU make)
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'
将为:=
变量设置一次值,即每次使遇到该变量时都不会重新评估它。编译代码时可以对性能产生巨大影响。
+=
将简单地将一个值添加到变量中。
用于赋值,:=
方式与 相同=
。
+=
为变量添加一个新值。