文章目录
make syncconfig
# 顶层 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 ...... 563 %config: scripts_basic outputmakefile FORCE 564 $(Q)$(MAKE) $(build)=scripts/kconfig $@ ...... 2318 FORCE:
执行命令
make syncconfig V=1
时,94行条件成立,KBUILD_VERBOSE = 1
,则101行条件成立,quiet 和 Q 为空
,则输出整个命令。
在顶层Makefile的 <386行> 引用scripts/Kbuild.include
,其中有如下定义:# scripts/Kbuild.include 184 build := -f $(srctree)/scripts/Makefile.build obj
最终展开为:
# make syncconfig V=1 # 顶层 Makefile 563 syncconfig: scripts_basic outputmakefile FORCE 564 make -f ./scripts/Makefile.build obj=scripts/kconfig syncconfig
由上可知,依赖关系如下图所示:
- 创建目标
syncconfig
,见《4. make -f ./scripts/Makefile.build obj=scripts/kconfig syncconfig》, 回显 4-10
1.1 创建scripts_basic
,见《1. 创建 scripts_basic》, 回显 1-3
1.2 创建outputmakefile
,见《2. 创建 outputmakefile》,什么都不做
1.3 创建FORCE
,什么都不做
最终:《2. conf 工具》
回显 1-101 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 syncconfig 5 cc -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.c 6 bison -oscripts/kconfig/zconf.tab.c -t -l scripts/kconfig/zconf.y 7 flex -oscripts/kconfig/zconf.lex.c -L scripts/kconfig/zconf.l 8 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 9 cc -o scripts/kconfig/conf scripts/kconfig/conf.o scripts/kconfig/zconf.tab.o 10 scripts/kconfig/conf --syncconfig Kconfig