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
也不是没看过因为意外多了一个档案让整个make流程烂掉而且东找西找怎么都找不出来为什么昨天好好的今天就故障写好.PHONY和把一串检查流程写进文件粗体强调你选一个
IC 厂写的程式基本上需要 debug 的地方可多了Makefile 和 build script 出槌是日常我上次帮他们修了一处,他们问我想不想跳槽过去
你的理解就像酒驾的驾驶说只要不肇事就没有问题好像有道理,但是我就眼睁睁看着有人出过事,你说呢.PHONY 就是因此而出现的啊
逻辑上来说,all 还要包括 MAKEFILE_LIST 里面的目标们但 radio 和 video 两个 target 都是 .PHONY 这没错make all = make radio + make video + make 其他没写的所以原则上你举的范例是能正常运作没错补充一点,就算 all 这个档案存在,video 和 radio 还是会被执行一遍
作者:
Lipraxde (Lipraxde)
2021-01-28 22:50:00酒驾不要肇事,譬喻的真好XDD