前言
本文分别讲述了Makefile文件中几种赋值符号。
平台:Ubuntu 18.04.6 LTS
make:GNU Make 4.1
GCC: gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
= 符号
由上图可知,在Makefile文件中,若是使用“=”符号对同一个变量进行多次赋值,每一次的赋值会覆盖上一次的数值。
:= 符号
再看:
由上图可知,在使用赋值符号“:=”的时候,只将该位置之前定义的数值赋值给变量,该位置之后的重新定义的数值也不再影响到“:=”的赋值结果。
?= 符号
由上图可知,符号“?=”在赋值之前,先检查当前位置之前,当前被赋值的变量是否已经赋过值,若没有,则执行当前的赋值语句;若当前位置之前,已经赋过值,即使该值为“empty”,当前的“?=”语句也不会再对其进行赋值了。
另外,看符号“?=”,先有一个“?”再接"=",是不是也可以理解为“先判断在赋值”呢!
+= 符号
该赋值符号为追加,若变量之前没有赋值,则直接赋值给变量;若变量已经有初始值,则将新的值追加上去,但是注意上图黄色箭头,追加值与原值之间有一个空格。