u-boot项目管理之Makefile.build

分析1:built.in.o的生成过程

分析2

分析1:built.in.o的生成过程

step1:“根Makefile“ 中  "u-boot-dirs目标" 执行scripts/Makefile.build  且obj=cmd

PHONY += $(u-boot-dirs)
$(u-boot-dirs): prepare scripts
	$(Q)$(MAKE) $(build)=$@

解释:
1. u-boot-dirs为一系列的目录
2.对应展开后的其中一条命令为:@make -f $(srctree)/scripts/Makefile.build obj=cmd


################################################
libs-y += cmd/
libs-y += common/
libs-y += env/
libs-y := $(sort $(libs-y))
#匹配/目录,然后替换中去掉/
u-boot-dirs	:= $(patsubst %/,%,$(filter %/, $(libs-y))) tools examples 

step2:“根Makefile“中  "u-boot-dirs目标" 执行scripts/Makefile.build  且obj=cmd
              $(LD) $(ld_flags) -r -o built.in.o   $(filter $(obj-y), $^)

############################# scripts/Makefile.build ##################

########## 代码块1 src =obj(src=cmd)                  #######################
# Modified for U-Boot
prefix := tpl
src := $(patsubst $(prefix)/%,%,$(obj))
ifeq ($(obj),$(src))
prefix := spl
src := $(patsubst $(prefix)/%,%,$(obj))
ifeq ($(obj),$(src))
prefix := .
endif
endif

########## 代码块2 auto.conf 和autoconf.mk组合配置      ##############
# Read auto.conf if it exists, otherwise ignore
# Modified for U-Boot
-include include/config/auto.conf
-include $(prefix)/include/autoconf.mk
include scripts/Makefile.uncmd_spl

include scripts/Kbuild.include

########## 代码块3 inclue cmd/Makefile(包含obj-y obj-m obj-) #################
# The filename Kbuild has precedence over Makefile
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)
include $(kbuild-file)

########## 代码块4 builtin-target=cmd/built-in.o         #################
    ifneq ($(strip $(obj-y) $(obj-m) $(obj-) $(subdir-m) $(lib-target)),)
    builtin-target := $(obj)/built-in.o
    endif

########## 代码块4 builtin-target=cmd/built-in.o         #################
#
# Rule to compile a set of .o files into one .o file
#
ifdef builtin-target
quiet_cmd_link_o_target = LD      $@
# If the list of objects to link is empty, just create an empty built-in.o
cmd_link_o_target = $(if $(strip $(obj-y)),\
		      $(LD) $(ld_flags) -r -o $@ $(filter $(obj-y), $^) \
		      $(cmd_secanalysis),\
		      rm -f $@; $(AR) rcs$(KBUILD_ARFLAGS) $@)

$(builtin-target): $(obj-y) FORCE
	$(call if_changed,link_o_target)

targets += $(builtin-target)
endif # builtin-target

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值