Makefile中的3个赋值符号“=”“:=”“?=”和一个追加符号"+="

1、首先学习Makefile需要明确一个概念:

make 命令会为 Makefile 中的每个以 TAB 开始的命令创建一个 Shell 进程去执行。

2、赋值符号“=”

代码:

name = maykolo

curname = $(name)

name = len

print:

  @echo curname = $(curname)

输入make后,结果:

 Makefile中的3个赋值符号“=”“:=”“?=”和一个追加符号"+="

得到结论:

赋值符号“=”,是将最后一次的结果赋值给“name” 变量。

 

3、赋值符号“:=”

代码;

name = maykolo

curname := $(name)

name = len

print:

  @echo curname = $(curname)

输入make后,结果:

 Makefile中的3个赋值符号“=”“:=”“?=”和一个追加符号"+="

得到结论:

赋值符号“:=”,不会使用后面定义的变量,使用距离引用变量的最新一次的变量结果。看如下:

name = maykolo

name = hanxiaojie

curname := $(name)

name = len

print:

  @echo curname = $(curname)

结果:

 Makefile中的3个赋值符号“=”“:=”“?=”和一个追加符号"+="

4、赋值符号“?=”

代码:

name = maykolo

curname ?= $(name)

name = len

print:

  @echo curname = $(curname)

输入make后:

 Makefile中的3个赋值符号“=”“:=”“?=”和一个追加符号"+="

得到结论:

如果变量 curname 前面没有被赋值,那么此变量就是“ len”,如果前面已经赋过值了,那么就使用前面赋的值。估计有的人会在这块迷糊,看到认真的人,肯定能明白,不认真的人就会问为什么不是“maykolo”。下面解答:

代码:

curname = hanxiaojie

name = maykolo

curname ?= $(name)

name = len

print:

  @echo curname = $(curname)

输入make后:

 Makefile中的3个赋值符号“=”“:=”“?=”和一个追加符号"+="

结论;仔细看我前面的话,是在判断“curname”变量而不是在判断“name”变量。第一次的那个代码相对于先使用赋值符“=”符号,给curname赋值len,后面判断前面有没有赋值,那前面已经赋值过了,就肯定是得到的结果是len。如果还是不理解,多添加几个变量自己多体会体会。

5、“+=” 这是一个变量追加符号.

Makefile 中的变量是字符串,有时候我们需要给前面已经定义好的变量添加一些字符串进去,此时就要使用到符号“ +=”,比如如下所示代码:

name = good

print:

  @echo $(name)

结果:

 Makefile中的3个赋值符号“=”“:=”“?=”和一个追加符号"+="

然后使用追加符:

name = good

name += nice

print:

@echo $(name)

结果:

 Makefile中的3个赋值符号“=”“:=”“?=”和一个追加符号"+="

 

上一篇:测试随笔


下一篇:makefile中的patsubst、notdir、wildcard介绍以及用法