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

(1) = 最简单的赋值

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

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

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

输出:

exbot@ubuntu:~/liyijun$ make all
echo ghdef
ghdef

(2) := 一般也是赋值

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

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

输出:

exbot@ubuntu:~/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:

朱老师讲义

猜你喜欢

转载自blog.csdn.net/wwwlyj123321/article/details/81672881