linux内核中build,linux内核Makefile中的build构建机制

一. build定义:scripts/Kbuild.includebuild:= -f$(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj$(KBUILD_SRC)常规情况下为空,所以的变量定义可简化为:build:= -fscripts/Makefile.build obj二.(MAKE) $(build)=的处理过程build使用...
摘要由CSDN通过智能技术生成

一. build定义:

scripts/Kbuild.include

build

:= -f

$(if $(KBUILD_SRC),$(srctree)/)

scripts/Makefile.build obj

$(KBUILD_SRC)常规情况下为空,所以的变量定义可简化为:

build

:= -f

scripts/Makefile.build obj

二. (MAKE) $(build)=的处理过程

build使用的一般形式为:

$(MAKE) $(build)=

build_dir  [

argv]

斜体字部分为可变目录和参数,其中[

argv] 可选。使用scripts/Kbuild.include中的$(build)变量定义,进行变量替换后,上述命令则为:

$(MAKE) -f scripts/Makefile.build obj=

build_dir  [

argv]

Make进入由参数-f指定的Make文件scripts/Makefile.build,并传入参数obj=

build_dir和

argv。

在scripts/Makefile.build的处理过程中,传入的参数$(obj) 代表此次Make命令要处理(编译、链接、和生成) 文件所在的目录,该目录下通常情况下都会存在的Makefile文件会被Makefile.build包含。$(obj)目录下的Makefile记为$(obj)/Makefile。针对Make命令,有两种情况:不指明Make目标和指定目标。

1.不指定目标

$(MAKE) $(build)=

build_dir  [

argv]

中,当没有参数[argv]时,该Make命令没有指定目标。如顶层Makefile中,$(vmlinux-dirs)的构建规则:

$(vmlinux-dirs): prepare scripts

$(Q)$(MAKE) $(build)=$@

其他的还有主机程序fixdep的构建规则:

scripts_basic:

$(Q)$(MAKE) $(build)=scripts/basic

这时会使用Makefile.build中的默认目标__build。然后更进一步,会使用$(obj)/Makefile中定义的变量来进行目标匹配。

__build在Makefile.build中的构建规则为:

__build

:

$(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y))

\

$(if $(KBUILD_MODULES),$(obj-m) $(modorder-target))

\

$(subdir-ym)

$(always)

@:

首先会构建该默认目标__build的依赖。Make会寻找重建这些依赖的规则。而这些规则要么在当前的Makefile文件Makefile.build中,要么在Makefile.build include的$(obj)/Makefile中。在此不指定Make目标的情况下,会使用Makefile.build中的构建规则来重建依赖。相应地

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值