转载请注明出处,谢谢
声明:由于不清楚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)
因此,显式匹配中,按照最大匹配优先,其次为半匹配,最后为完全通配符匹配
由于显式规则能重载、取消隐藏规则(测试见我的另外一篇博客),因此显式规则优先级 > 隐藏规则
本文探讨了Makefile中规则的执行优先级,从显式规则的完全匹配、半匹配到完全通配符匹配,揭示了显式规则优于隐藏规则的规律。通过实验验证,得出显式规则中最大匹配优先,其次是半匹配,再次是完全通配符匹配的结论,并指出显式规则能覆盖隐藏规则。
3490

被折叠的 条评论
为什么被折叠?



