本文主要是介绍make menuconfig 分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 生成目标%config
make menuconfig V=1:
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
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 为空
,则输出整个命令。
输入命令自动匹配顶层 Makefile 的第563 行并执行,由于目标%config
依赖scripts_basic
、outputmakefile
和FORCE
, 则执行顺序如下:1. 执行依赖
scripts_basic
,481-483行
2. 执行依赖outputmakefile
,492-497行
3. 执行依赖FORCE
,什么都不做,2318行
这三个依赖的生成见《make xxxx_defconfig 分析》中的步骤1和步骤2:
打印和执行
$(cmd_host-csingle)
命令【即生成 scripts/basic/fixdep 工具】,将实现目标scripts/basic/fixdep
所用的命令、源码、头文件等信息全部写入到scripts/basic/.fixdep.cmd
文件中。
回显 1-3 行: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
生成目标%config
由上面的分析可知,
%config
的三个依赖scripts_basic
、outputmakefile
和FORCE
都已经实现。
- 依赖
scripts_basic
:为了生成scripts/basic/fixdep
- 依赖
outputmakefile
:什么都不做- 依赖
FORCE
:什么都不做
$(build)
在 scripts/Kbuild.include 文件【在顶层Makefile的386行引用】的第184行定义:184 build := -f $(srctree)/scripts/Makefile.build obj
最终展开为:
563 %config: scripts_basic outputmakefile FORCE 564 make -f ./scripts/Makefile.build obj=scripts/kconfig menuconfig
结果:由 < 3. make ./scripts/Makefile.build obj=scripts/kconfig menuconfig > 分析可知:
这篇关于make menuconfig 分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!