文章目录
- [make menuconfig V=1](#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
、outputmakefile
和FORCE
, 所以先生成依赖:
- 生成依赖
scripts_basic
,见《make xxxx_defconfig 分析---1.1 生成依赖scripts_basic》,生成 scripts/basic/fixdep, 【回显 1-3 行】- 生成依赖
outputmakefile
,《make xxxx_defconfig 分析---1.2 生成依赖outputmakefile》,什么都不做- 生成依赖
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 > 分析可知:
- 执行 **(src)/mconf-cfg.sh** 脚本,并将执行结果写入到`(obj)/.mconf-cfg` 文件中。【生成 $(obj)/.mconf-cfg 文件】 【回显 5 行】
- 打印和执行
$(cmd_host-cobjs)
,并将实现目标$(obj)/mconf.o
所用的命令、源码、头文件等信息全部写入到$(obj)/.mconf.o.cmd
文件中。 【回显 6 行】- 打印和执行
$(cmd_flex)
,并将cmd_scripts/kconfig/flex.lex.c := $(cmd_flex)
的内容输入到scripts/kconfig/.zconf.lex.c.cmd
文件中。【生成 flex.lex.c 文件】 【回显 8 行】- 打印和执行
$(cmd_bison)
,并将cmd_scripts/kconfig/zconf.tab.c := $(cmd_bison)
的内容输入到scripts/kconfig/.zconf.tab.c.cmd
文件中。【生成 zconf.tab.c 文件】 【回显 7 行】- 打印和执行
$(cmd_host-cobjs)
,并将实现目标$(obj)/zconf.tab.o
所用的命令、源码、头文件等信息全部写入到scripts/kconfig/.zconf.tab.o.cmd
文件中。【生成 zconf.tab.o 文件】 【回显 9 行】- 打印和执行
$(cmd_host-cobjs)
,并将实现目标$(obj)/lxdialog/checklist.o
所用的命令、源码、头文件等信息全部写入到$(obj)/lxdialog/.checklist.cmd
文件中。 【回显 10 行】- 打印和执行
$(cmd_host-cobjs)
,并将实现目标$(obj)/lxdialog/inputbox.o
所用的命令、源码、头文件等信息全部写入到$(obj)/lxdialog/.inputbox.cmd
文件中。 【回显 11 行】- 打印和执行
$(cmd_host-cobjs)
,并将实现目标$(obj)/lxdialog/menubox.o
所用的命令、源码、头文件等信息全部写入到$(obj)/lxdialog/.menubox.cmd
文件中。 【回显 12 行】- 打印和执行
$(cmd_host-cobjs)
,并将实现目标$(obj)/lxdialog/textbox.o
所用的命令、源码、头文件等信息全部写入到$(obj)/lxdialog/.textbox.cmd
文件中。 【回显 13 行】- 打印和执行
$(cmd_host-cobjs)
,并将实现目标$(obj)/lxdialog/checklist.o
所用的命令、源码、头文件等信息全部写入到$(obj)/lxdialog/.util.cmd
文件中。 【回显 14 行】- 打印和执行
$(cmd_host-cobjs)
,并将实现目标$(obj)/lxdialog/yesno.o
所用的命令、源码、头文件等信息全部写入到$(obj)/lxdialog/.yesno.cmd
文件中。 【回显 15 行】- 打印和执行
$(cmd_host-cmulti)
,并将cmd_scripts/kconfig/mconf := $(cmd_host-cmulti)
的内容输入到scripts/kconfig/.mconf.cmd
文件中。【生成 mconf 工具】 【回显 16 行】- 执行
scripts/kconfig/mconf Kconfig
命令, 【回显 17 行】mconf 工具的使用