結論源自實驗測試,如果有疏漏希望指出
當Makefile中存在多個匹配的目標時,Makefile會採用哪個匹配的目標呢?
測試的Makefile如下:
.PHONY: all clean quick_sort
all: quick_sort bubble_sort
#目標1
quick_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
測試結果如下:
$make
matching quick_sort
in quick_sort
matching bubble_sort
in %_sort
在實驗中,all
目標有兩個依賴的子目標quick_sort
和bubble_sort
。
在匹配quick_sort
子目標時,目標1-3都符合,按實驗結果,最終執行的是目標1。
在匹配bubble_sort
子目標時,目標2-3都符合,按實驗結果,最終執行的是目標3。
爲了避免從上往下順序匹配的可能,在匹配quick_sort
時,特地把最完整匹配放在目標1。
按上述實驗的現象,我們可以發現:
完整匹配 > 通配符半匹配 > 完全通配符匹配