Makefile基本语法

24.1基本用法

Makefile语法:

目标(target)…: 依赖(prerequiries)…

<tab>命令(command)

如果“依赖文件”比“目标文件”更加新,那么执行“命令”来重新生成“目

标文件”。命令被执行的 2 个条件:依赖文件比目标文件新,或是目标文件还没生成。

make 命令根据文件更新的时间戳来决定哪些文件需要重新编译,这使得可以避免编译已经编译过的、没有变化的程序,可以大大提高编译效率。

24.2四种变量

“:=” 即时变量 ,定义时就起效

“=”   延时变量 ,使用时才起效

“?=” 延时变量 ,如果是第一次定义才起效,前面有定义过则忽略

“+=”  附加变量,它是即时变量还是延时变量取决于前面的定义

输出结果:

echo相当于打印,前面加个@的作用是打印结果时省略当前语句,“&()”相当于取哪个变量的值,例如这里&(B),就是取变量B的值,即C的值,为“abc 123”

24.3常用函数

1.foreach(扩展输出)

使用语法:$(foreach var,list,text)

在Makefile脚本中,A = a b c定义了一个变量,包含三个元素a、b和c。然后,B = $(foreach f , $(A), $(f).o )使用了foreach函数,对于每个元素f在列表$(A)中,执行了操作$(f).o,生成了对应的对象文件(如a.o、b.o、c.o)。因此,变量B最终会包含这些对象文件的列表。

当目标all被执行时,@echo B = $(B)打印出变量B的值:

2.filter/filter-out(筛选符合内容的值)

$(filter pattern...,text) # 在text中取出符合patten格式的值

$(filter-out pattern...,text) # 在text中取出不符合patten格式的值

3.Wildcard(筛选符合文件的值)

$(wildcard pattern) # pattern定义了文件名的格式, wildcard取出其中存在的文件

4.patsubst(替换内容)

$(patsubst pattern,replacement,\$(var))

patsubst 函数是从 var 变量里面取出每一个值,如果这个符合 pattern 格式,把它替换成

replacement 格式,

通配符%是文件内含有的内容,好比c语言的“%d”,*是文件名含有的内容。

代码:

输出:

分析:

B使用了foreach的函数,把A的内容统统扩展为%.o,故输出为a.o...

D使用了filter函数,筛选了C中含有“/”的内容

E使用了filter-out函数,筛选了C中不含有“/”的内容

F使用了filter函数,筛选了B中含有“.o”的内容,而B的输出均含有.o,故F的输出结果即为B的内容

files使用了wildcard函数,筛选了当前文件夹内含有.c的文件

files3也使用了wildcard函数,将files2的内容中筛选出了当前文件夹真正存在的文件

Dep_files使用了patsubst函数,将files2的内容中含有.c的内容替换为.d,若不含有则不替换,正常打印。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值