本文主要是介绍make xxxx_defconfig 分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 执行依赖scripts_basic
- 执行依赖outputmakefile
- 实现%config
make rpi_3_32b_defconfig V=1:
make -f ./scripts/Makefile.build obj=scripts/basiccc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -o scripts/basic/fixdep scripts/basic/fixdep.c
rm -f .tmp_quiet_recordmcount
make -f ./scripts/Makefile.build obj=scripts/kconfig rpi_3_32b_defconfigcc -Wp,-MD,scripts/kconfig/.conf.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -c -o scripts/kconfig/conf.o scripts/kconfig/conf.cbison -oscripts/kconfig/zconf.tab.c -t -l scripts/kconfig/zconf.yflex -oscripts/kconfig/zconf.lex.c -L scripts/kconfig/zconf.lcc -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.ccc -o scripts/kconfig/conf scripts/kconfig/conf.o scripts/kconfig/zconf.tab.o
scripts/kconfig/conf --defconfig=arch/../configs/rpi_3_32b_defconfig Kconfig
#
# configuration written to .config
#
make rpi_3_32b_defconfig :
HOSTCC scripts/basic/fixdepHOSTCC scripts/kconfig/conf.oYACC scripts/kconfig/zconf.tab.cLEX scripts/kconfig/zconf.lex.cHOSTCC scripts/kconfig/zconf.tab.oHOSTLD scripts/kconfig/conf
#
# configuration written to .config
#
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 rpi_3_32b_defconfig 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行
执行依赖scripts_basic
481 scripts_basic: 482 $(Q)$(MAKE) $(build)=scripts/basic 483 $(Q)rm -f .tmp_quiet_recordmcount
$(build)
在 scripts/Kbuild.include 文件【在顶层Makefile的386行引用】的第184行定义:184 build := -f $(srctree)/scripts/Makefile.build obj
$(srctree)
在顶层 Makefile 中定义为srctree = .
,所以展开后为:scripts_basic:make -f ./scripts/Makefile.build obj=scripts/basicrm -f .tmp_quiet_recordmcount
结果:由 ./scripts/Makefile.build 分析可知:打印并执行下列第2行的内容,生成
scripts/basic/fixdep
软件,将cmd_scripts/basic/fixdep := cc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -o scripts/basic/fixdep scripts/basic/fixdep.c
内容写入到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
执行依赖outputmakefile
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
当输入
make O=dir
时,KBUILD_SRC=dir
,由于这里没有O=
,所以第493行条件不成立,这里什么都不做。
实现%config
由上面的分析可知,
%config
的三个依赖scripts_basic
、outputmakefile
和FORCE
都已经实现。
1.依赖scripts_basic
:为了生成scripts/basic/fixdep
2.依赖outputmakefile
:什么都不做
3.依赖FORCE
:什么都不做563 %config: scripts_basic outputmakefile FORCE 564 $(Q)$(MAKE) $(build)=scripts/kconfig $@
最后执行第564行命令来生成最终目标
%config
,最终展开为:563 %config: scripts_basic outputmakefile FORCE 564 make ./scripts/Makefile.build obj=scripts/kconfig rpi_3_32b_defconfig
结果:由 ./scripts/Makefile.build 分析可知:
这篇关于make xxxx_defconfig 分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!