2012-04-19 41 views
8

以下声明中的工作区别是什么?make文件中的=和+ =有什么区别?

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

你有答案(及以上)到这个[复制问题(http://stackoverflow.com/questions/448910/makefile-variable-assignment) – Seki 2012-04-19 12:06:09

+0

什么已经成为阅读精美手册的古老传统?答案就在你的指尖...... – Jens 2012-10-09 10:19:06

回答

4

:=定义变量这里是左手侧,+=添加右手侧到变量的现有值。比较:==,其评价在使用场所的右手边(而不是在这个特殊的线)

你可以看一下说明书here(假设你正在使用GNU使)

-3

:=是分配方式与=相同。

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

+0

:=和=是一样的吗?这是亵渎! – shikhanshu 2017-06-20 20:40:15

0

This website

的语法:=Link to place on page

简单扩展变量,通过使用线限定“:=”(参见设置变量)。一个简单的扩展变量的值被一次性扫描,当定义变量时扩展对其他变量和函数的引用。简单扩展变量的实际值是扩展您编写的文本的结果。它不包含任何对其他变量的引用;它包含了这个变量被定义时的值。

的语法+=Link to place on page

当所讨论的变量尚未定义,“+ =”行为就像正常“=”:它定义了一个递归扩展变量。但是,如果存在以前的定义,那么'+ ='确实取决于您最初定义的变量的风格。请参阅变量的两个风味,以获得两种变量的解释。

0

:=将为变量设置一次值,也就是说,每次将变量设置为变量时,它将不会被重新评估。编译代码时可以使性能发生巨大差异。

+=将简单地为变量加上一个值。

9
  • :=(简单扩展变量)的值进行扫描以一劳永逸扩大任何
    引用其他变量和函数,变量被定义时。例如 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'

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

3

“=”用于定义递归扩展变量。后续使文件会打印出“Y是后来吧”

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

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

“:=”是定义简单扩展型变量,这是一劳永逸扩大。下面让文件会打印出“y是富巴”

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

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

另外,其他人前面指出的,你可以在GNU进行手动的Using Variables节得到更多的细节。

希望这有助于:-)