第18課 - make 中的路徑搜索(下)
阿新 • • 發佈:2018-01-28
處理方式 .com 多個 image col class bubuko spl 存在
第18課 - make 中的路徑搜索(下)
1. 問題一
當 VPATH 和 vpath 同時出現,make 會如何處理?
工程項目的目錄結構如下圖所示,src1 和 src2 中都包含了 func.c 文件,如果在 makefile 中使用 VPATH 指定了 src1 ,使用 vpath 指定了 src2,當 VPATH 和 vpath 同時存在時,make 會做出怎樣的處理?
【編程實驗】
1 #include <stdio.h> 2 #include "func.h" 3 4 void foo() 5 { 6 printf("void foo() : %s\nsrc1目錄中的func.c文件", "This file is from src1 ..."); 7 }
1 #include <stdio.h> 2 #include "func.h" 3 4 void foo() 5 { 6 printf("void foo() : %s\n", "This file is from src2 ..."); 7 }src2目錄中的func.c文件
1 VPATH := src1 # 使用VPATH指定src1 2 CFLAGS := -I inc 3 4 vpath %.c src2 #使用vpath指定src2VPATH和vpath同時出現,make的處理方式5 vpath %.h inc 6 7 app.out : func.o main.o 8 @gcc -o $@ $^ 9 @echo "Target File ==> $@" 10 11 %.o : %.c func.h 12 @gcc $(CFLAGS) -o $@ -c $<
執行 make 後的輸出結果:
【實驗結論】
make 搜索文件的次序如下:
make 首先在當前文件夾中搜索需要的文件,如果搜索失敗,make 優先在 vpath 指定的文件夾中搜索目標文件,當 vpath 搜索失敗時,轉而搜索 VPATH 指定的文件夾。
2. 問題二
當使用 vpath 對同一個 Pattern 指定多個文件夾時,make 會如何處理?
工程項目的目錄結構與問題一相同,src1 和 src2 中都包含了 func.c 文件,如果在 makefile 中使用 vpath 同時指定了兩個src1 和 src2 兩個目錄,make 會做出怎樣的處理?
【編程實驗】
1 CFLAGS := -I inc 2 3 vpath %.c src1 4 vpath %.c src2 5 6 vpath %.h inc 7 8 app.out : func.o main.o 9 @gcc -o $@ $^ 10 @echo "Target File ==> $@" 11 12 %.o : %.c func.h 13 @gcc $(CFLAGS) -o $@ -c $< 14 15vpath指定多個文件夾
執行 make 後的輸出結果:(src1 出現在 src2 之前)
【實驗結論】
當 makefile 中使用 vpath 對同一個 Pattern 指定了多個目錄時,make 會以自上而下的順序搜索 vpath 指定的文件夾,當找到目標文件時,搜索結束。
3. 問題三
註:本文整理於《狄泰12月提升計劃》課程內容
第18課 - make 中的路徑搜索(下)