1. 程式人生 > >第18課 - make 中的路徑搜索(下)

第18課 - make 中的路徑搜索(下)

處理方式 .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\n
", "This file is from src1 ..."); 7 }
src1目錄中的func.c文件 技術分享圖片
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指定src2
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 $<
VPATH和vpath同時出現,make的處理方式

  執行 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 
15     
vpath指定多個文件夾

  執行 make 後的輸出結果:(src1 出現在 src2 之前)

  技術分享圖片

【實驗結論】

  當 makefile 中使用 vpath 對同一個 Pattern 指定了多個目錄時,make 會以自上而下的順序搜索 vpath 指定的文件夾,當找到目標文件時,搜索結束。

  技術分享圖片

3. 問題三

註:本文整理於《狄泰12月提升計劃》課程內容

第18課 - make 中的路徑搜索(下)