1、首先学习Makefile需要明确一个概念:
make 命令会为 Makefile 中的每个以 TAB 开始的命令创建一个 Shell 进程去执行。
2、赋值符号“=”
代码:
name = maykolo
curname = $(name)
name = len
print:
@echo curname = $(curname)
输入make后,结果:
得到结论:
赋值符号“=”,是将最后一次的结果赋值给“name” 变量。
3、赋值符号“:=”
代码;
name = maykolo
curname := $(name)
name = len
print:
@echo curname = $(curname)
输入make后,结果:
得到结论:
赋值符号“:=”,不会使用后面定义的变量,使用距离引用变量的最新一次的变量结果。看如下:
name = maykolo
name = hanxiaojie
curname := $(name)
name = len
print:
@echo curname = $(curname)
结果:
4、赋值符号“?=”
代码:
name = maykolo
curname ?= $(name)
name = len
print:
@echo curname = $(curname)
输入make后:
得到结论:
如果变量 curname 前面没有被赋值,那么此变量就是“ len”,如果前面已经赋过值了,那么就使用前面赋的值。估计有的人会在这块迷糊,看到认真的人,肯定能明白,不认真的人就会问为什么不是“maykolo”。下面解答:
代码:
curname = hanxiaojie
name = maykolo
curname ?= $(name)
name = len
print:
@echo curname = $(curname)
输入make后:
结论;仔细看我前面的话,是在判断“curname”变量而不是在判断“name”变量。第一次的那个代码相对于先使用赋值符“=”符号,给curname赋值len,后面判断前面有没有赋值,那前面已经赋值过了,就肯定是得到的结果是len。如果还是不理解,多添加几个变量自己多体会体会。
5、“+=” 这是一个变量追加符号.
Makefile 中的变量是字符串,有时候我们需要给前面已经定义好的变量添加一些字符串进去,此时就要使用到符号“ +=”,比如如下所示代码:
name = good
print:
@echo $(name)
结果:
然后使用追加符:
name = good
name += nice
print:
@echo $(name)
结果: