[問題] makefile phony問題

作者: anoymouse (沒有暱稱)   2021-01-26 09:36:45
ubuntu
GCC
# Subdirectories to build
SUBDIRS = \
radio \
video \
# RULES
.PHONY : $(SUBDIRS) $(MAKEFILE_LIST)
all : $(SUBDIRS) $(MAKEFILE_LIST)
$(SUBDIRS) :
@echo "Building [email protected]"
$(A)$(MAKE) -C [email protected]
請教一下
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 [email protected]"
$(A)$(MAKE) -C [email protected]
video :
@echo "Building [email protected]"
$(A)$(MAKE) -C [email protected]
請問這樣的理解正確嗎?
謝謝
作者: Lipraxde (Lipraxde)   2021-01-26 13:50:00
「前提是沒有檔案叫做all的話?」,應該是沒這種前提,乖乖寫成 phony
作者: Schottky (順風相送)   2021-01-27 01:44:00
也不是沒看過因為意外多了一個檔案讓整個make流程爛掉而且東找西找怎麼都找不出來為什麼昨天好好的今天就故障寫好.PHONY和把一串檢查流程寫進文件粗體強調你選一個
作者: anoymouse (沒有暱稱)   2021-01-27 14:43:00
因為ic廠sdk就這樣寫 所以來確認理解是否正確
作者: Schottky (順風相送)   2021-01-27 17:16:00
IC 廠寫的程式基本上需要 debug 的地方可多了Makefile 和 build script 出槌是日常我上次幫他們修了一處,他們問我想不想跳槽過去
作者: anoymouse (沒有暱稱)   2021-01-27 18:43:00
哈哈 真的假的 太強了!那我這理解有沒有問題?
作者: Schottky (順風相送)   2021-01-27 19:19:00
你的理解就像酒駕的駕駛說只要不肇事就沒有問題好像有道理,但是我就眼睜睜看著有人出過事,你說呢.PHONY 就是因此而出現的啊
作者: anoymouse (沒有暱稱)   2021-01-27 19:57:00
好 那多目標規則也正確吧?謝謝
作者: Schottky (順風相送)   2021-01-27 20:02:00
邏輯上來說,all 還要包括 MAKEFILE_LIST 裡面的目標們但 radio 和 video 兩個 target 都是 .PHONY 這沒錯make all = make radio + make video + make 其他沒寫的所以原則上你舉的範例是能正常運作沒錯補充一點,就算 all 這個檔案存在,video 和 radio 還是會被執行一遍
作者: anoymouse (沒有暱稱)   2021-01-27 20:23:00
因為phony target總是會被執行是嗎
作者: Schottky (順風相送)   2021-01-27 20:27:00
沒錯
作者: Lipraxde (Lipraxde)   2021-01-28 22:50:00
酒駕不要肇事,譬喻的真好XDD

Links booklink

Contact Us: admin [ a t ] ucptt.com