如果我下载新的 buildroot(截至 2024 年),我可以看到,当我没有明确选择使用 u-boot 构建的选项时,在运行时
make help
我将看不到与 u-boot 相关的任何内容。另一方面,如果我运行 menuconfig
并选择 u-boot,我将看到与 u-boot 相关的配置选项。这个机制是如何运作的?
P。 S.:我看到 Config.in 中的 if/endif 部分位于 /boot/uboot。但是 Makefile 如何包含此包的新动态目标呢?我还是不知道..
P。 P.S.:我非常想研究一下 u-boot 是如何完成的,这样我就可以对我的包做同样的事情。
当您运行
make help
时,Make 只需运行顶层 Makefile 中定义的 help
目标的命令:
help:
@echo 'Cleaning:'
@echo ' clean - delete all files created by build'
@echo ' distclean - delete all non-source files (including .config)'
@echo
@echo 'Build:'
...
在那篇很长的文字中间是动态部分:
$(foreach p,$(HELP_PACKAGES), \
@echo $(sep) \
@echo '$($(p)_NAME):' $(sep) \
$($(p)_HELP_CMDS)$(sep))
sep
是一个换行符 - 我们不能在那里使用实际的换行符,因为我们位于 foreach
命令中。
HELP_PACKAGES
设置在 inner-generic-package
中巨大的 package/pkg-generic.mk
宏中。如果启用了包并且它定义了 FOO_HELP_CMDS
,它会将包的名称添加到该列表中。
$(p)_NAME
和 $(p)_HELP_CMDS
扩展为 UBOOT_NAME
和 UBOOT_HELP_CMDS
。 UBOOT_NAME
也由 inner-generic-package
设置。 UBOOT_HELP_CMDS
设置为 package/pkg-kconfig.mk