(1)= 在等号右侧的值是变量的值,右侧的值可以定义在文件中的任何一处,也就是说,右侧 中的变量不一定非要是已经定义好的值,其也可以使用后面定义的值。也就是说用=赋值的变量,在被解析时他的值取决于最后一次赋值时的值,所以你看变量引用的值时不能只往前面看,还要往后面看。
(2):= 用:=来赋值的,前面的变量不能使用后面的变量,只能使用前面已经定义好了的变量。
下面通过例子来说明:
A=abc
B=$(A)def
A=gh
all:
@echo KaTeX parse error: Expected \'EOF\', got \'#\' at position 9: (B) #̲结果为ghdef 若将=改…(A)def这句则结果为都abcdef(即解析谁就看谁)
(3)?= 如果变量前面并没有赋值过则执行这条赋值,如果前面已经赋值过了则本行被忽略。(所谓的没有赋值过其实就是这个变量没有被定义过)
(4)+= 用来给一个已经赋值的变量接续赋值(把这次的值加到原来的值的后面)有点类似于strcat函数。(在shell makefile等文件中,可以认为所有变量都是字符串,+=就相当于给字符串stcat接续内容)(注意一个细节,+=续接的内容和原来的内容之间会自动加一个空格隔开)
objs := start.o led.o clock.o
objs += lib/libc.a #这二行等于objs := start.o led.o clock.o lib/libc.a
注意:Makefile中并不要求赋值运算符两边一定要有空格或者无空格,这一点比shell的格式要求要松一些。
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。


