第十一章 U-boot 顶层 Makefile 详解 (模块编译)

11.2.7 模块编译

        在 uboot 中允许单独编译某个模块,使用命令" make M=dir",旧语法"makeSUBDIRS=dir"也是支持的。

200 # Use make M=dir to specify directory of external module to build
201 # Old syntax make ... SUBDIRS=$PWD is still supported
202 # Setting the environment variable KBUILD_EXTMOD take precedence
203 ifdef SUBDIRS
204 KBUILD_EXTMOD ?= $(SUBDIRS)
205 endif
206
207 ifeq ("$(origin M)", "command line")
208 KBUILD_EXTMOD := $(M)
209 endif
210
211 # If building an external module we do not care about the all: rule
212 # but instead _all depend on modules
213 PHONY += all
214 ifeq ($(KBUILD_EXTMOD),)
215 _all: all
216 else
217 _all: modules
218 endif
219
220 ifeq ($(KBUILD_SRC),)
221 # building in the source tree
222 srctree := .
223 else
224     ifeq ($(KBUILD_SRC)/,$(dir $(CURDIR)))
225         # building in a subdirectory of the source tree
226         srctree := ..
227     else
228            srctree := $(KBUILD_SRC) 
229 endif
230 endif
231 objtree     := .
232 src     := $(srctree)
233 obj     := $(objtree)
234
235 VPATH    := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
236
237 export srctree objtree VPATH

        第 203 行 判 断 是 否 定 义 了 SUBDIRS , 如 果 定 义 了 SUBDIRS , 变 量KBUILD_EXTMOD=SUBDIRS,这里是为了支持老语法“make SUBIDRS=dir”
        第 207 行判断是否在命令行定义了 M,如果定义了的话 KBUILD_EXTMOD=$(M)。
        第 214 行判断 KBUILD_EXTMOD 是否为空,如果为空的话目标_all 依赖 all,因此要先编译出 all。否则的话默认目标_all 依赖 modules。要先编译出 modules,也就是编译模块。一般情况下我们不会在 uboot 中编译模块,所以此处会编译 all 这个目标。
        第 220 行判断 KBUILD_SRC 是否为空,如果为空的话就设置变量 srctree 为当前目录,即srctree 为“.”。一般不设置 KBUILD_SRC。
        第 231 行设置变量 objtree 为当前目录。
        第 232 和 233 行分别设置变量 src 和 obj,都为当前目录。
        第 235 行设置 VPATH。
        第 237 行导出变量 scrtree、objtree 和 VPATH。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值