[問題] makefile phony問題

看板C_and_CPP作者 (沒有暱稱)時間3年前 (2021/01/26 09:36), 編輯推噓5(5020)
留言25則, 3人參與, 3年前最新討論串1/1
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

01/26 13:50, 3年前 , 1F
「前提是沒有檔案叫做all的話?」,應該是沒這種前提,
01/26 13:50, 1F

01/26 13:50, 3年前 , 2F
乖乖寫成 phony
01/26 13:50, 2F

01/27 01:44, 3年前 , 3F
也不是沒看過因為意外多了一個檔案讓整個make流程爛掉
01/27 01:44, 3F

01/27 01:44, 3年前 , 4F
而且東找西找怎麼都找不出來為什麼昨天好好的今天就故障
01/27 01:44, 4F

01/27 01:45, 3年前 , 5F
寫好.PHONY和把一串檢查流程寫進文件粗體強調你選一個
01/27 01:45, 5F

01/27 14:43, 3年前 , 6F
因為ic廠sdk就這樣寫 所以來確認理解是否正確
01/27 14:43, 6F

01/27 17:16, 3年前 , 7F
IC 廠寫的程式基本上需要 debug 的地方可多了
01/27 17:16, 7F

01/27 17:17, 3年前 , 8F
Makefile 和 build script 出槌是日常
01/27 17:17, 8F

01/27 17:17, 3年前 , 9F
我上次幫他們修了一處,他們問我想不想跳槽過去
01/27 17:17, 9F

01/27 18:43, 3年前 , 10F
哈哈 真的假的 太強了!
01/27 18:43, 10F

01/27 18:57, 3年前 , 11F
那我這理解有沒有問題?
01/27 18:57, 11F

01/27 19:19, 3年前 , 12F
你的理解就像酒駕的駕駛說只要不肇事就沒有問題
01/27 19:19, 12F

01/27 19:20, 3年前 , 13F
好像有道理,但是我就眼睜睜看著有人出過事,你說呢
01/27 19:20, 13F

01/27 19:22, 3年前 , 14F
.PHONY 就是因此而出現的啊
01/27 19:22, 14F

01/27 19:57, 3年前 , 15F
好 那多目標規則也正確吧?
01/27 19:57, 15F

01/27 19:58, 3年前 , 16F
謝謝
01/27 19:58, 16F

01/27 20:02, 3年前 , 17F
邏輯上來說,all 還要包括 MAKEFILE_LIST 裡面的目標們
01/27 20:02, 17F

01/27 20:04, 3年前 , 18F
但 radio 和 video 兩個 target 都是 .PHONY 這沒錯
01/27 20:04, 18F

01/27 20:05, 3年前 , 19F
make all = make radio + make video + make 其他沒寫的
01/27 20:05, 19F

01/27 20:11, 3年前 , 20F
所以原則上你舉的範例是能正常運作沒錯
01/27 20:11, 20F

01/27 20:14, 3年前 , 21F
補充一點,就算 all 這個檔案存在,video 和 radio 還是
01/27 20:14, 21F

01/27 20:15, 3年前 , 22F
會被執行一遍
01/27 20:15, 22F

01/27 20:23, 3年前 , 23F
因為phony target總是會被執行是嗎
01/27 20:23, 23F

01/27 20:27, 3年前 , 24F
沒錯
01/27 20:27, 24F

01/28 22:50, 3年前 , 25F
酒駕不要肇事,譬喻的真好XDD
01/28 22:50, 25F
文章代碼(AID): #1W3t8lYe (C_and_CPP)