转载请注明出处,谢谢
声明:由于不清楚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)
因此,显式匹配中,按照最大匹配优先,其次为半匹配,最后为完全通配符匹配
由于显式规则能重载、取消隐藏规则(测试见我的另外一篇博客),因此显式规则优先级 > 隐藏规则