@
目錄- 1. 前言
- 2. 概述
- 3. 老版本UBOOT(背景)
- 4. 新版本UBOOT
- 5. 參考
1. 前言
UBOOT版本:uboot2018.03,開發板myimx8mmek240,
2. 概述
當我們執行的命令是make命令時 ,由于后面沒有帶引數,因此makefile會編譯默認遇到的第一個目標,
3. 老版本UBOOT(背景)
# 頂層Makefile
......
# dependency target in autoconf.mk.dep from being the default.
all: (1) //空命令
sinclude $(obj)include/autoconf.mk.dep
sinclude $(obj)include/autoconf.mk
......
all: $(ALL) (2)
$(obj)u-boot.hex: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@
1. 如果沒有第一個all :
直接執行了sinclude,打開autoconf.mk.dep看到第一行就是include/autoconf.mk: include/common.h ,這就是makefile遇到的第一個目標include/autoconf.mk,因此將include/autoconf.mk當做終極目標執行了,此時的include/autoconf.mk是前一次剛產生的(make xxx_deconfig),所以是最新的,makefile認為沒有必要重新執行,
因此什么都不做,最后輸出了make: `include/autoconf.mk' is up to date,空命令(all:)的唯一作用是防止make在執行時,試圖為重建這個目標去查找隱含命令,這個隱含的命令就是執行第一個遇到的目標,
2. 如果有第一個all :
makefile就知道需要執行的終極目標是 all,而不是include的autoconf.mk.dep里面的include/autoconf.mk,繼續執行到遇到后面的all: 后面的all將覆寫前面的all,所以最終執行的是第二個all,
因此第一個all的含義就是 如果你執行make的時候沒有帶任何其他目標,單獨的一個make,可以避免以autoconf.mk.dep里面的include/autoconf.mk作為錯誤目標,
如果你執行make的時候帶了目標,這個all:有不有都無所謂,
4. 新版本UBOOT
# 頂層Makefile
# If building an external module we do not care about the all: rule
# but instead _all depend on modules
PHONY += all //偽目標all
ifeq ($(KBUILD_EXTMOD),) //假設未定義KBUILD_EXTMOD
_all: all //_all 是頂層Makefile第一個目標,依賴是all (1)
else
_all: modules
endif
......
all: $(ALL-y) cfg (2)
ifeq ($(CONFIG_DM_I2C_COMPAT)$(CONFIG_SANDBOX),y)
@echo "===================== WARNING ======================"
@echo "This board uses CONFIG_DM_I2C_COMPAT. Please remove"
@echo "(possibly in a subsequent patch in your series)"
@echo "before sending patches to the mailing list."
@echo "===================================================="
endif
@# Check that this build does not use CONFIG options that we do not
@# know about unless they are in Kconfig. All the existing CONFIG
@# options are whitelisted, so new ones should not be added.
$(call cmd,cfgcheck,u-boot.cfg)
因此第一個all的含義就是 如果執行make的時候沒有帶任何其他目標,單獨的一個make,那么_all作為頂層Makefile第一個目標,自然就成了默認執行的目標,而_all的依賴又是all,因此實際真正的執行的是上述代碼中第(2)條,
5. 參考
(1)uboot makefile里面的兩個all:作用(偽目標,空命令)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/533474.html
標籤:嵌入式
上一篇:Cache的相關知識(二)
