makefile的语法及写法(补充:%和*的区别)

Makefile通配符与特殊符号详解
本文详细解析了Makefile中的通配符%与*的区别,以及特殊符号如$@、$^等的使用方法,并通过实例展示了如何利用这些符号进行文件名转换和依赖项管理。

Makefile中的%标记和系统通配符*的区别在于,*是应用在系统中的,%是应用在这个Makefile文件中的。

通配符%的意思是:

  •  当没有目标test1.o时,要找test1.o的构造规则,看看Makefile中那个规则符合。
  •  然后找到了%.o:%.c,
  •  来套一下来套一下:
  •  %.o 和我要找的 test1.o 匹配
  • 套上了,得到%=test1。
  • 所以在后面的%.c就表示test1.c了。
  • OK进行构造

而通配符*的意思是:

  • 不知道目标的名字系统该目录下中所有后缀为.c的文件都是我要找的。
  • 然后遍历目录的文件,看是否匹配。找出所有匹配的项目。

下面是几个特舒符号的意思:

$@:目标的名字

$^:构造所需文件列表所有所有文件的名字

$<:构造所需文件列表的第一个文件的名字

$?:构造所需文件列表中更新过的文件

例如:

1 test1.o:test1.c

2     gcc -o $@ $<

$@:就是test1.o

$<:就是test1.c

1 test1.o:test1.c head.c
2     gcc -o $@ $^

$^:就是test1.c head.c


$(subst 要被替换的字符串,用来替换的字符串,被处理的字符串)

用“用来替换的字符串”替换“被处理的字符串”中的“要被替换的字符串”

所以:

$(subst .c,.o,test1.c test2.c)

就会得到test1.o test2.o

 

$(wildcard 寻找的文件)

在系统中寻找文件

例如:

$(wildcard *.c)

就等于找到系统中所有后缀为.c的文件,返回成以空格隔开的一整行字符

例如:test1.c test2.c test3.c 这样

 

$(basename 文件名)

取得文件的名字(去掉后缀的意思)

例如:

$(basename test1.c)

就会取得test1







评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值