对于Make中的变量分配,我看到:=和=运算符。它们之间有什么区别?
7
Makefile变量赋值的
—
eldarerathis,2011年
对于Make中的变量分配,我看到:=和=运算符。它们之间有什么区别?
Answers:
这在GNU Make文档的标题为6.2变量的两种风格 的部分中进行了描述。
简而言之,用定义的变量将:=
被扩展一次,但是用定义的变量将在使用时=
被扩展。
make
主任务)的开销比内部变量解析要大得多。
:=
一个简单的赋值表达式在第一次出现时仅被评估一次。例如,如果CC :=${GCC} ${FLAGS}
在第一次相遇期间评估为,gcc -W
则每次${CC}
发生时都将替换为gcc -W
。
=
每次在代码中遇到变量时,都会评估递归赋值表达式。例如,CC = ${GCC} {FLAGS}
仅当${CC} file.c
执行like之类的动作时,才会对like之类的语句进行评估。然而,如果变量GCC
被重新分配,即
GCC=c++
那么${CC}
将被转换为c++ -W
重新分配之后。
?=
条件赋值仅在没有值的情况下才将值赋给变量
+=
假设CC = gcc
再追加运算符用于像CC += -w
那么CC
现在拥有价值gcc -W
有关更多信息,请查看这些教程
来自http://www.gnu.org/software/make/manual/make.html#Flavors:
=
定义一个递归扩展的变量。 :=
定义一个简单扩展的变量。