在制作宏中,":="和"="有什么区别?

91

可能是重复问题:
GNU Makefile 中 =、?=、:= 和 += 的区别是什么?

我只了解非常基本的makefile语法,并且正在阅读另一个项目的makefile,发现使用:=进行宏声明。为什么他们要使用这个符号?

换句话说,以下代码是否有区别:

MYMACRO = hi i'm a macro
and
MYMACRO := hi i'm a macro

?


3
Makefile 变量赋值的语法:VAR_NAME = value可以使用 $ 符号来引用变量:$(VAR_NAME)在使用变量时,也可以进行字符串替换操作:$(VAR_NAME:old=new)例如,将 SRC_DIR 中的 .c 后缀替换为 .o 后缀:OBJ_FILES = $(SRC_DIR:%.c=%.o) - cnicutar
1
请特别参考http://www.gnu.org/software/make/manual/make.html#Flavors。 - Alexandre C.
1
因此,在问题的示例中没有区别,但如果MYMACRO使用另一个宏,并且在处理makefile时另一个宏的值可能会更改,则会有区别。 - simpleuser
1
@cnicutar 'info' 不是内部或外部命令,也不是可运行的程序或批处理文件。 - BrainSlugs83
1个回答

130

:=GNU make 中定义变量的方式,它在定义时进行展开而不是使用时。


27
请问您能详细说明一下,“扩展”这个词所引发的含义吗? - rubo77
4
“扩展”意味着将“$variable”替换为其“value”。有关更多细节,请参见此处:http://stackoverflow.com/a/30215530/5016540 - thangdc94
3
一个例子会很有帮助。我发现在“重复”中链接的答案更加详细。 - Leo Ufimtsev
一些示例将有所帮助 - jersey bean
例子= 用于_递归扩展_。 这意味着右侧的值不会立即计算。这使得像这样的事情成为可能:A = $(B) world B = hello all: @echo $(A)输出:hello world:= 则用于立即计算。使用此符号运行上述 Makefile 只会显示 "world"。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接