一:Makefile变量

1、赋值符号“=”
20191024153840343.png2019102415393259.png
实验结果显示被“=”赋值的变量,其值取决于最后一次赋值。
指令“print”中echo前加上“@”和省略其命令执行过程,结果如下:
2、赋值符“:=”
201910241523342.png20191024152404104.png
3、赋值符“?=”
image.png image.png
如果“name”已经被赋值则用之前的值“zhao”,否则用“li”
4、变量追加“+=”

  ![20191024153541221.png](https://cdn.nlark.com/yuque/0/2022/png/26139547/1653748183188-0134cae8-1d27-405f-a719-182e3f5eb54a.png#clientId=uf74e8550-4887-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=u6307b019&margin=%5Bobject%20Object%5D&name=20191024153541221.png&originHeight=150&originWidth=300&originalType=binary&ratio=1&rotation=0&showTitle=false&size=10186&status=done&style=none&taskId=u710b533d-9bb6-4ffe-a23c-2c76aa2a6ff&title=)![20191024153619751.png](https://cdn.nlark.com/yuque/0/2022/png/26139547/1653748187431-bfa450d3-a896-46b4-a943-d49f0be974d6.png#clientId=uf74e8550-4887-4&crop=0&crop=0&crop=1&crop=1&from=drop&id=ub8f9edbd&margin=%5Bobject%20Object%5D&name=20191024153619751.png&originHeight=150&originWidth=300&originalType=binary&ratio=1&rotation=0&showTitle=false&size=13196&status=done&style=none&taskId=u6e2ee99c-c558-4a34-af35-d397bd2eb1e&title=)

在变量“name”之后追加“wang”

三:Makefile模式规则
a.o : a.c
gcc -c a.c
b.o : b.c
gcc -c b.c
运行模式规则“%”:当目标中重现“%”时,目标中“%”所代表的值决定了依赖文件中的“%”的值

%.o : %.c
gcc -c $<
四、Makefile伪目标
伪目标主要是为了避免Makefile中定义的执行指令和工作目录下的实际文件出现名字冲突。

举例说明:当前目录下如果有一个名为“clean”的文件,执行make clean指令,因为没有依赖文件,所以后续的rm指令不会被执行。解决方法为在Makefiel中将指令声明为伪目标即可“.PHONY”

.PHONY

clean:
rm *.o
... ...
五、Makefile函数
1、函数“subst”:完成字符串替换

$(subst <from>, <to>, <text>)<br /> <br />$(subst aaa, AAA, 3a transform 3A aaa)
将字符串“3a transform 3A aaa ”中的“aaa”替换为“AAA”即:“3a transform 3A AAA”

2、函数“patsubst”:完成模式字符串替换

$(patsubst <pattern>, <replacement>, <text>)<br /> <br />$(patsubst %.c, %.o, a.c b.c c.c)
将字符串“a.c b.c c.c”替换为“a.o b.o c.o”

如果text = a.c b.c c.c

那么,“$(text: .c = .o)”等同于“$(patsubst %.c, %.o, $(text))”

3、函数“dir”:获取目录

$(dir <name...>)<br /> <br />$(dir </src/a.c>)
提取文件“/src/a.c”的目录部分“/src”

4、函数“notdir”:提取目录名

$(notdir <name...>)<br /> <br />$(notdir <src/a.c>)
提取文件“/src/a.c”的非目录部分“a.c”

5、函数“foreach”:完成循环

6、函数“wildcard”:在非规则模式下即变量定义和函数中等同于“%”通配符,将相应对象展开

$(foreach <var>, <list>, <text>)

SRCDIRS := dira dirb dirc
$(foreach dir, $(SRCDIRS), $(wildcard $(dir) / *.c))
循环将SRCDIRS中的各个目录放进dir变量中,调用wildcard函数提取dir目录下所有.c文件

六、Makefile自动化变量

20191024163707803.png

标签: none

评论已关闭