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

2021-10-06 21:29:17 字數 1791 閱讀 1356

檔案結構:

實驗結果:

- make 首先在當前資料夾搜尋需要的檔案

-如果失敗:

make 優先在 vpath 指定的資料夾中搜尋目標檔案

當 vpath 搜尋失敗時,轉而搜素 vpath 指定的資料夾

檔案結構改變:

檔案結構改變:當src1 和 src2 下面只有 func.cpp 檔案,那麼這個makefile會正常執行嗎?

不會正常執行,會報找不到 func.h 的錯誤,那麼為什麼會找不到func.h呢?因為會觸發隱式規則,在使用 func.cpp生成 func.o 時發現找不到 func.h,因為指定搜尋路徑只是針對make,在隱式規則下的gcc命令並沒有指定 -i引數

檔案結構:

cflags := -i inc

vatph %.c src1

vatph %.c src2

@gcc -o $@ $^

@echo "target file ==> $@"

%.o : %.c func.h

@gcc $(cflags) -o $@ -c $<

實驗結論:

- make 首先在當前資料夾搜尋需要的檔案

-如果失敗:make 以自上而下的順序搜尋vpath指定的資料夾

檔案結構改變:

檔案結構改變:當src1 和 src2 下面只有 func.cpp 檔案,那麼這個makefile會正常執行嗎?

不會正常執行,會報錯無法生成func.o,好像這次和上面那個例子報錯不一樣,難道make沒有嘗試使用隱式規則嗎?不是的,make的確嘗試了,但是由於這個makefile 的 vpath 只是針對%.c 檔案指定了路徑,所以根本找不到 func.cpp,自然就無法生成 func.o

檔案結構:

vpath := src

cflags := -i inc

@gcc -o $@ $^

@echo "target file ==> $@"

%.o : %.c func.h

@gcc $(cflags) -o $@ -c $<

實驗結論:解決方案:

- 使用 gpath 特殊變數指定目標資料夾

- gpath := src

第 18 課 cli 功能設計(下)

判斷使用者指定的專案生成目錄是否為當前目錄或該目錄已經存在。如果是,執行 5,否則執行 2。執行 run 方法,判斷使用者指定的模板是否為本地模板。如果是,執行 3,否則執行 4。執行 generate 方法建立專案。詢問使用者是否繼續執行。如果是,執行 2,否則執行 4。退出程式。以下是 kgt ...

第15課 make 的隱式規則(上)

mekefile 現同名目標時 eg all echo the one all all echo the two all all echo the three all 執行結果 什麼是隱式規則?示例 思考下面的makefile檔案是否可以執行 main.c includevoid func int ...

C (物件的構造 18課(中))

帶有引數的建構函式 建構函式可以根據需要定義引數 乙個類中可以存在多個過載的建構函式 建構函式的過載遵循c 過載的規則 因為引數初始化也是有不同的需求的,所以初始化有必要過載使用 友情提示 物件定義和物件宣告不同 物件定義 申請物件的空間並呼叫建構函式 物件宣告 告訴編譯器存在這樣乙個物件 例項1 ...