结论源自实验测试,如果有疏漏希望指出
当Makefile中存在多个匹配的目标时,Makefile会采用哪个匹配的目标呢?
测试的Makefile如下:
.PHONY: all clean quick_sortall: quick_sort bubble_sort#目标1quick_sort: @echo "matching $@" @echo 'in quick_sort'#目标2%: @echo "matching $@" @echo 'in %'#目标3%_sort: @echo "matching $@" @echo 'in %_sort'clean: $(RM) *.o bubble_sort quick_sort
测试结果如下:
$makematching quick_sortin quick_sortmatching bubble_sortin %_sort
在实验中,all
目标有两个依赖的子目标quick_sort
和bubble_sort
。
quick_sort
子目标时,目标1-3都符合,按实验结果,最终执行的是目标1。 在匹配bubble_sort
子目标时,目标2-3都符合,按实验结果,最终执行的是目标3。 为了避免从上往下顺序匹配的可能,在匹配quick_sort
时,特地把最完整匹配放在目标1。
按上述实验的现象,我们可以发现:
完整匹配 > 通配符半匹配 > 完全通配符匹配