Makefile 规则的执行优先级(不讨论隐藏规则内的优先级)

本文探讨了Makefile中规则的执行优先级,从显式规则的完全匹配、半匹配到完全通配符匹配,揭示了显式规则优于隐藏规则的规律。通过实验验证,得出显式规则中最大匹配优先,其次是半匹配,再次是完全通配符匹配的结论,并指出显式规则能覆盖隐藏规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载请注明出处,谢谢

声明:由于不清楚makefile的匹配规则算法,下面的结论都是自己思考后测试的结果,如若有出错,还请指出

=============================================================

结论:(优先级由上往下递减)
显式规则:

完全匹配

半匹配

完全通配符匹配

隐藏规则:

(据说按照隐藏规则的顺序,测试发现,能一步达成的优先级高于分多步达成,

例如:%:%.c > %.o:%.c + %:%.o)

需要补充说明的是:显式规则若无命令,则此规则不参与匹配优先级

==============================================================

以下为验证过程:

<span style="font-size:18px;">.PHONY:all clean

all:quick_sort bubble_sort
#匹配1
%_sort: %_sort.c
	@echo "matching $@"
	@echo 'in %_sort'
#匹配2
%:%.c
	@echo "matching $@"
	@echo 'in %'
#匹配3
quick_sort:quick_sort.c
	@echo "matching $@"
	@echo 'in quick_sort'

clean:
	$(RM) *.o bubble_sort quick_sort</span>

输出结果:

$make
matching quick_sort
in quick_sort
matching bubble_sort
in %_sort
$

结论:

显式规则中并不是按照上下文顺序匹配,因为匹配quick_sort时3个目标每一个都能匹配,而make选择了3最大匹配。匹配bubble_sort时,目标1、2均能匹配,然后make选择了2半匹配(%_sort)

因此,显式匹配中,按照最大匹配优先,其次为半匹配,最后为完全通配符匹配


由于显式规则能重载、取消隐藏规则(测试见我的另外一篇博客),因此显式规则优先级 > 隐藏规则



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值