曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 9725|回复: 0
打印 上一主题 下一主题

[Kernel] make 与 make all

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-7-7 20:14:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Makefile 对应内核版本: 2.6.35.13

在编译内核时,我们看下只是简单的执行 make 命令时都会做些什么,而执行时 make all 命令时又和只执行 make 时有什么不同。

在只是执行 make 时,因为没有明确指定目标,所以 $(MAKECMDGOALS) 变量为空,此时 Makefile 几个变量的取值如下:
[C++] 纯文本查看 复制代码
dot-config     := 1      // 提示要构建与 .config 文件相关的目标,如 vmlinux bzImage 等。
config-targets=0       // 不需要生成 .config ,所以 config-targets 为 0 。
mixed-targets=0       // make 命令中不指定目标,make all 中指定 1 个目标 all,所以不是构建混合目标,故 mixed-targets 为 0
KBUILD_EXTMOD=""  // 不是构建外部模块,所以 KBUILD_EXTMOD 为空
KBUILD_OUTPUT=""   // 不使用 O 选项指定构建目标的生成路径,故 KBUILD_OUTPUT 为空
skip-makefile=""       // 如果 skip-makefile 变量为 1,就基本什么都不做


在顶层 Makefile 中的 105-106 行可以看到:
[code=Makefile]# That's our default target when none is given on the command line
PHONY := _all
_all:[/mw_shl_code]
上面表示当不指定构建任何目标时, _all 即为默认要构建的目标。

在顶层 Makefile 的 455 行有:
[code=Makefile]include $(srctree)/arch/$(SRCARCH)/Makefile[/mw_shl_code]
以 x86 平台为例,这里将 arch/x86/Makefile 包含进来,在这个文件的第 151 行可以看到:
[code=Makefile]all: bzImage[/mw_shl_code]

在顶层 Makefile 的第 531 行,第 1020 行分别看到:
[code=Makefile]all: vmlinux
all: modules[/mw_shl_code]

又在顶层 Makefile 的第 139-146 行看到:
[code=Makefile]# If building an external module we do not care about the all: rule
# but instead _all depend on modules
PHONY += all
ifeq ($(KBUILD_EXTMOD),)
_all: all
else
_all: modules
endif[/mw_shl_code]
由上可见,缺省目标 _all 依赖于 all,而各个 all 又分别依赖于 vmlinux, bzImage, modules 。所以直接执行 make 会依次生成 vmlinux, bzImage, modules 。由此可见,make 和 make all 是等同的。

如果用 make help 来查看,可以发现:
* vmlinux      - Build the bare kernel
* modules      - Build all modules
* bzImage      - Compressed kernel image (arch/x86/boot/bzImage)
上面的 3 个目标前面都有一个星号,表示默认情况下会生成它们。

上面所述的情况可以用下面简单的 Makefile 来表示:
[code=Makefile]_all += all

.PHONY: _all

_all:all
    @echo "_all generated"

all: vmlinux

all: bzImage

all: modules

vmlinux:
    @touch vmlinux

bzImage:
    @touch bzImage

modules:
    @touch modules
[/mw_shl_code]
运行输出:
$ make
_all generated
$ ls
bzImage  Makefile  modules  vmlinux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-17 23:55 , Processed in 0.068252 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表