make menuconfig 分析

文章目录

  • [make menuconfig V=1](#make menuconfig V=1)

make menuconfig V=1:

bash 复制代码
1 	make -f ./scripts/Makefile.build obj=scripts/basic
2 	  cc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11     -o scripts/basic/fixdep scripts/basic/fixdep.c   
3 	rm -f .tmp_quiet_recordmcount
4 	make -f ./scripts/Makefile.build obj=scripts/kconfig menuconfig
5 	set -e; mkdir -p scripts/kconfig/; 	/bin/bash scripts/kconfig/mconf-cfg.sh < scripts/kconfig/mconf-cfg.sh > scripts/kconfig/.mconf-cfg.tmp; if [ -r scripts/kconfig/.mconf-cfg ] && cmp -s scripts/kconfig/.mconf-cfg scripts/kconfig/.mconf-cfg.tmp; then rm -f scripts/kconfig/.mconf-cfg.tmp; else : '  UPD     scripts/kconfig/.mconf-cfg'; mv -f scripts/kconfig/.mconf-cfg.tmp scripts/kconfig/.mconf-cfg; fi
6 	  cc -Wp,-MD,scripts/kconfig/.mconf.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/mconf.o scripts/kconfig/mconf.c
7 	  bison -oscripts/kconfig/zconf.tab.c -t -l scripts/kconfig/zconf.y
8 	  flex -oscripts/kconfig/zconf.lex.c -L scripts/kconfig/zconf.l
9 	  cc -Wp,-MD,scripts/kconfig/.zconf.tab.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -Iscripts/kconfig -c -o scripts/kconfig/zconf.tab.o scripts/kconfig/zconf.tab.c
10	  cc -Wp,-MD,scripts/kconfig/lxdialog/.checklist.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/checklist.o scripts/kconfig/lxdialog/checklist.c
11	  cc -Wp,-MD,scripts/kconfig/lxdialog/.inputbox.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/inputbox.o scripts/kconfig/lxdialog/inputbox.c
12	  cc -Wp,-MD,scripts/kconfig/lxdialog/.menubox.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/menubox.o scripts/kconfig/lxdialog/menubox.c
13	  cc -Wp,-MD,scripts/kconfig/lxdialog/.textbox.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/textbox.o scripts/kconfig/lxdialog/textbox.c
14	  cc -Wp,-MD,scripts/kconfig/lxdialog/.util.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/util.o scripts/kconfig/lxdialog/util.c
15	  cc -Wp,-MD,scripts/kconfig/lxdialog/.yesno.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -c -o scripts/kconfig/lxdialog/yesno.o scripts/kconfig/lxdialog/yesno.c
16	  cc   -o scripts/kconfig/mconf scripts/kconfig/mconf.o scripts/kconfig/zconf.tab.o scripts/kconfig/lxdialog/checklist.o scripts/kconfig/lxdialog/inputbox.o scripts/kconfig/lxdialog/menubox.o scripts/kconfig/lxdialog/textbox.o scripts/kconfig/lxdialog/util.o scripts/kconfig/lxdialog/yesno.o   -Wl,-Bsymbolic-functions -lncursesw -ltinfo
17	scripts/kconfig/mconf  Kconfig
bash 复制代码
# 顶层 Makefile
94 	ifeq ("$(origin V)", "command line")
95 	  KBUILD_VERBOSE = $(V)
96 	endif
97 	ifndef KBUILD_VERBOSE
98 	  KBUILD_VERBOSE = 0
99 	endif
100
101	ifeq ($(KBUILD_VERBOSE),1)
102	  quiet =
103	  Q =
104	else
105	  quiet=quiet_
106	  Q = @
107	endif
......
481	scripts_basic:
482		$(Q)$(MAKE) $(build)=scripts/basic
483		$(Q)rm -f .tmp_quiet_recordmcount
......
492	outputmakefile:
493	ifneq ($(KBUILD_SRC),)
494		$(Q)ln -fsn $(srctree) source
495		$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
496			$(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
497	endif
......	
563	%config: scripts_basic outputmakefile FORCE
564		$(Q)$(MAKE) $(build)=scripts/kconfig $@
......
2318 FORCE:

当在命令行中输入: make menuconfig V=1 时,94行条件成立,KBUILD_VERBOSE = 1,101行条件成立,quiet 和 Q 为空,则输出整个命令。

输入命令自动匹配 563 行,由于目标 %config依赖 scripts_basic outputmakefileFORCE, 所以先生成依赖:

  1. 生成依赖 scripts_basic ,见《make xxxx_defconfig 分析---1.1 生成依赖scripts_basic》,生成 scripts/basic/fixdep, 【回显 1-3 行】
  2. 生成依赖 outputmakefile《make xxxx_defconfig 分析---1.2 生成依赖outputmakefile》,什么都不做
  3. 生成依赖 FORCE,什么都不做

由上面三步可知,目标%config 的所有依赖都已生成,接下来执行目标的生成语句即可。
$(build)在 scripts/Kbuild.include 文件【在顶层Makefile的386行引用】的第184行定义:

bash 复制代码
# scripts/Kbuild.include 
184	build := -f $(srctree)/scripts/Makefile.build obj

最终展开为:

bash 复制代码
# 顶层 Makefile
563	menuconfig: scripts_basic outputmakefile FORCE
564		make -f ./scripts/Makefile.build obj=scripts/kconfig menuconfig

**结果:**由 < 3. make -f ./scripts/Makefile.build obj=scripts/kconfig menuconfig > 分析可知:

  1. 执行 **(src)/mconf-cfg.sh** 脚本,并将执行结果写入到`(obj)/.mconf-cfg` 文件中。【生成 $(obj)/.mconf-cfg 文件】 【回显 5 行】
  2. 打印和执行$(cmd_host-cobjs),并将实现目标$(obj)/mconf.o所用的命令、源码、头文件等信息全部写入到 $(obj)/.mconf.o.cmd 文件中。 【回显 6 行】
  3. 打印和执行$(cmd_flex),并将cmd_scripts/kconfig/flex.lex.c := $(cmd_flex)的内容输入到 scripts/kconfig/.zconf.lex.c.cmd 文件中。【生成 flex.lex.c 文件】 【回显 8 行】
  4. 打印和执行$(cmd_bison),并将cmd_scripts/kconfig/zconf.tab.c := $(cmd_bison)的内容输入到 scripts/kconfig/.zconf.tab.c.cmd 文件中。【生成 zconf.tab.c 文件】 【回显 7 行】
  5. 打印和执行 $(cmd_host-cobjs),并将实现目标 $(obj)/zconf.tab.o 所用的命令、源码、头文件等信息全部写入到 scripts/kconfig/.zconf.tab.o.cmd 文件中。【生成 zconf.tab.o 文件】 【回显 9 行】
  6. 打印和执行$(cmd_host-cobjs),并将实现目标$(obj)/lxdialog/checklist.o所用的命令、源码、头文件等信息全部写入到 $(obj)/lxdialog/.checklist.cmd 文件中。 【回显 10 行】
  7. 打印和执行$(cmd_host-cobjs),并将实现目标$(obj)/lxdialog/inputbox.o所用的命令、源码、头文件等信息全部写入到 $(obj)/lxdialog/.inputbox.cmd 文件中。 【回显 11 行】
  8. 打印和执行$(cmd_host-cobjs),并将实现目标$(obj)/lxdialog/menubox.o所用的命令、源码、头文件等信息全部写入到 $(obj)/lxdialog/.menubox.cmd 文件中。 【回显 12 行】
  9. 打印和执行$(cmd_host-cobjs),并将实现目标$(obj)/lxdialog/textbox.o所用的命令、源码、头文件等信息全部写入到 $(obj)/lxdialog/.textbox.cmd 文件中。 【回显 13 行】
  10. 打印和执行$(cmd_host-cobjs),并将实现目标$(obj)/lxdialog/checklist.o所用的命令、源码、头文件等信息全部写入到 $(obj)/lxdialog/.util.cmd 文件中。 【回显 14 行】
  11. 打印和执行$(cmd_host-cobjs),并将实现目标$(obj)/lxdialog/yesno.o所用的命令、源码、头文件等信息全部写入到 $(obj)/lxdialog/.yesno.cmd 文件中。 【回显 15 行】
  12. 打印和执行$(cmd_host-cmulti),并将cmd_scripts/kconfig/mconf := $(cmd_host-cmulti)的内容输入到 scripts/kconfig/.mconf.cmd 文件中。【生成 mconf 工具】 【回显 16 行】
  13. 执行scripts/kconfig/mconf Kconfig命令, 【回显 17 行】mconf 工具的使用
相关推荐
INGNIGHT36 分钟前
270 · 电话号码的字母组合II(Trie)
linux·算法
zly350037 分钟前
VMware Converter Standalone 物理机转化为虚拟机后源1硬盘变成了2个硬盘(2个硬盘文件)虚拟机无法启动。
linux·运维·服务器
GeW2 小时前
从内核到数据:Linux与工业数据库如何支撑高端制造
linux
小小的木头人3 小时前
Linux systemd Service 与 Timer 定时任务原理及实战
linux
熊明才5 小时前
WSL2 网络突然瘫痪(Network is unreachable / 没有 eth0)最短修复指南(2026年9月20日亲测可用)
linux·windows·wsl2
Tairitsu_H5 小时前
[Linux系统] 自动化构建make / Makefile | 进度条
linux·操作系统·makefile·make
行者全栈架构师5 小时前
大模型运维准确率不到 50%?我们用 DeepSeek V4 测了 5 大场景,结果出人意料
linux·人工智能·开源
zzzyyy5386 小时前
TCP 协议学习笔记:从报文格式到异常处理
linux·网络
傲世仙尊6 小时前
ELF与动态库进阶-链接真相与GOT表
linux
M78佐菲7 小时前
ARM学习笔记(五)
linux·arm开发·笔记·嵌入式硬件·学习