欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Makefile初探3-变量的赋值运算符

程序员文章站 2022-06-04 08:51:22
...

(1) = 最简单的赋值

用=赋值的变量,在被解析时他的值取决于最后一次赋值时的值,所以你看变量引用的值时不能只往前面看,还要往后面看。

注意:Makefile中并不要求赋值运算符两边一定要有空格或者无空格,这一点比shell的格式要求要松一些。

  1 A=abc
  2 B=$(A)def
  3 A=gh
  4 
  5 all:
  6     echo $B

输出:

[email protected]:~/liyijun$ make all
echo ghdef
ghdef

(2) := 一般也是赋值

用:=来赋值的,则是就地直接解析,只用往前看即可。

  1 A=abc
  2 B:=$(A)def
  3 A=gh
  4 
  5 all:
  6     echo $B

输出:

[email protected]:~/liyijun$ make all
echo abcdef
abcdef

解析谁就看谁是:=  或者是=     虽然是A是=,但是B是:=,所以就按照:=执行

(3)?=

如果变量没有赋值过(前后都要看)则执行这条赋值,如果前面已经赋值过了则本行被忽略。(实验可以看出:所谓的没有赋值过其实就是这个变量没有被定义过)

实例1:

  1 var=abcd
  2 var?=ef
  3 
  4 all:
  5     echo $(var)

输出:

abcd

 实例2:

  1 
  2 var?=ef
  3 var=abcd
  4 all:
  5     echo $(var)

输出:

abcd

 实例3:

  2 var?=ef
  3 var=
  4 all:
  5     echo $(var)

输出为空,说明空值也算是赋值了

(4)+=  

用来给一个已经赋值的变量接续赋值,意思就是把这次的值加到原来的值的后面,有点类似于strcat。(在shell makefile等文件中,可以认为所有变量都是字符串,+=就相当于给字符串stcat接续内容)(注意一个细节,+=续接的内容和原来的内容之间会自动加一个空格隔开)

实例:

  1 var=ab
  2 var+=cd
  3 all:
  4     echo $(var)
  5 var+=ef

输出:

ab cd ef

 

 

REF:

朱老师讲义

相关标签: ARM