学习make工具,第一个指令解析:make s5p_goni_defconfig

前言:

为了使用uboot这个工具,开发板又是S5PV210,下载到 u-boot-2018.11 源码后,搭建好编译环境,用到第一个指令就是:

make  s5p_goni_defconfig

这个指令做了什么事情?

1、先Google这个指令,找到一篇博客详解了这个指令,编译第一步 make xxx_defconfig

2、根据上篇文章,知道 执行 make xxx_defconfig 命令时,u-boot 根目录下的 Makefile 中有唯一的规则匹配目标:
源代码如下:

%config: scripts_basic outputmakefile FORCE
	$(Q)$(MAKE) $(build)=scripts/kconfig $@
解析一: % 是通配符,表示长度任意的非空字符串,“%config” 表示 以“config”结尾 的字符串。
解析二:“%config:” 表示一个目标。
解析三:“%config:” 这个目标依赖下面三个目标,分别是scripts_basic/outputmakefile/FORCE。
解析四:变量Q 的值是 “@”,变量 MAKE 的值 是“make”,变量 build 的值 请看 上面的 博客。。。。。
解析五:

依赖目标一:FORCE

PHONY += FORCE
FORCE:

# Declare the contents of the .PHONY variable as phony.  We keep that
# information in a variable so we can use it in if_changed and friends.
.PHONY: $(PHONY)

**  FORCE如果被定义为一个空目标,如果一个目标添加 FORCE 依赖,每次编译都会去先去执行 FORCE(实际上什么都不做),然后运行命令更新目标,这样就能确保目标每次都会被更新。**

依赖目标二:outputmakefile

PHONY += outputmakefile
# outputmakefile generates a Makefile in the output directory, if using a
# separate output directory. This allows convenient use of make in the
# output directory.
outputmakefile:
ifneq ($(KBUILD_SRC),)
	$(Q)ln -fsn $(srctree) source
	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
	    $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
endif
解析一:ifneq  判断两个参数是否相同
解析二:KBUILD_SRC是一个变量,$(KBUILD_SRC) 表示引用这个变量的值
解析三:$(KBUILD_SRC)  和 空(NULL)进行判断,不相等为真,相等为假
解析四:KBUILD_SRC 是 代表编译输出路径,我 没有进行配置因此为NULL
总结: 这里应该 判断编译输出路径是否为空,不为空 则 把 编译输出文件 输出到 输出路径 下面。

依赖目标三:scripts_basic

# Basic helpers built in scripts/
PHONY += scripts_basic
scripts_basic:
	$(Q)$(MAKE) $(build)=scripts/basic
	$(Q)rm -f .tmp_quiet_recordmcount

# To avoid any implicit rule to kick in, define an empty command.
scripts/basic/%: scripts_basic ;
解析一:PHONY 是一个变量
解析二:+= 表示给变量 追加值,则 PHONY 变量 追加了  一个值  scripts_basic
解析三:scripts_basic是一个目标
解析四:变量Q 的值是 “@”,变量 MAKE 的值 是“make”,变量 build 的值 请看 上面的 博客。。。。。
解析五: “@”字符在命令行钱,那么这个命令就不被make工具打印到屏幕上
解析六:$(Q)$(MAKE) $(build)=scripts/basic  展开:@make -f ./scripts/Makefile.build obj=scripts/basic
解析七:make -f 表示 让 make 工具 指定执行 某个文件,即 Makefile.build 文件
解析八:执行 Makefile.build 这个文件  传入的 参数是:obj ,obj 值等于 scripts/basic

你可能感兴趣的:(make)