看板 C_and_CPP 關於我們 聯絡資訊
ubuntu GCC # Subdirectories to build SUBDIRS = \ radio \ video \ # RULES .PHONY : $(SUBDIRS) $(MAKEFILE_LIST) all : $(SUBDIRS) $(MAKEFILE_LIST) $(SUBDIRS) : @echo "Building $@" $(A)$(MAKE) -C $@ 請教一下 all 雖然沒有宣告成phony,但這種非實際檔案的target,是不是還是可以算是phony, 前提是沒有檔案叫做all的話? 因為在看GNU make 的手冊: "When one phony target is a prerequisite of another, it serves as a subroutine of the other." 然後再根據多目標規則,可以等效成: radio : @echo "Building $@" $(A)$(MAKE) -C $@ video : @echo "Building $@" $(A)$(MAKE) -C $@ 請問這樣的理解正確嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.242.38.34 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1611625007.A.8A8.html
Lipraxde: 「前提是沒有檔案叫做all的話?」,應該是沒這種前提, 01/26 13:50
Lipraxde: 乖乖寫成 phony 01/26 13:50
Schottky: 也不是沒看過因為意外多了一個檔案讓整個make流程爛掉 01/27 01:44
Schottky: 而且東找西找怎麼都找不出來為什麼昨天好好的今天就故障 01/27 01:44
Schottky: 寫好.PHONY和把一串檢查流程寫進文件粗體強調你選一個 01/27 01:45
anoymouse: 因為ic廠sdk就這樣寫 所以來確認理解是否正確 01/27 14:43
Schottky: IC 廠寫的程式基本上需要 debug 的地方可多了 01/27 17:16
Schottky: Makefile 和 build script 出槌是日常 01/27 17:17
Schottky: 我上次幫他們修了一處,他們問我想不想跳槽過去 01/27 17:17
anoymouse: 哈哈 真的假的 太強了! 01/27 18:43
anoymouse: 那我這理解有沒有問題? 01/27 18:57
Schottky: 你的理解就像酒駕的駕駛說只要不肇事就沒有問題 01/27 19:19
Schottky: 好像有道理,但是我就眼睜睜看著有人出過事,你說呢 01/27 19:20
Schottky: .PHONY 就是因此而出現的啊 01/27 19:22
anoymouse: 好 那多目標規則也正確吧? 01/27 19:57
anoymouse: 謝謝 01/27 19:58
Schottky: 邏輯上來說,all 還要包括 MAKEFILE_LIST 裡面的目標們 01/27 20:02
Schottky: 但 radio 和 video 兩個 target 都是 .PHONY 這沒錯 01/27 20:04
Schottky: make all = make radio + make video + make 其他沒寫的 01/27 20:05
Schottky: 所以原則上你舉的範例是能正常運作沒錯 01/27 20:11
Schottky: 補充一點,就算 all 這個檔案存在,video 和 radio 還是 01/27 20:14
Schottky: 會被執行一遍 01/27 20:15
anoymouse: 因為phony target總是會被執行是嗎 01/27 20:23
Schottky: 沒錯 01/27 20:27
Lipraxde: 酒駕不要肇事,譬喻的真好XDD 01/28 22:50