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

Nai*_*a B 14 unix linux makefile

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

 LDDIRS := -L$(ORACLE_LIB)
 LDDIRS += -L$(ORACLE_LIB)
Run Code Online (Sandbox Code Playgroud)

小智 14

  • :=(简单扩展变量)
    当定义变量时,扫描该值一次,并扩展对其他变量和函数的任何引用.例如 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'

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


Zhi*_*Zou 10

"="用于定义递归扩展变量.以下make文件将打印出"y is later bar"

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

all:;echo "y is" $(y)
Run Code Online (Sandbox Code Playgroud)

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

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

all:;echo "y is" $(y)
Run Code Online (Sandbox Code Playgroud)

此外,正如其他人之前指出的那样,您可以在GNU make手册的" 使用变量"部分中获得更多详细信息.

希望这可以帮助 :-)


小智 8

GNU Make 具有三个赋值运算符:“:=”、“=”、“?=”和一个用于附加到变量的“+=”。


Dav*_*eas 6

:=此处的变量定义为左侧,+=将右侧添加到变量的现有值。比较:==该评估在使用场所的右手边(而不是这一行)

你可以看这里的手册(假设你使用的是GNU make)