一. Linux内核顶层Makefile
Linux 的顶层 Makefile 和 uboot 的顶层 Makefile 非常相似,因为 uboot 参考了 Linux。
二. Linux内核-顶层Makefile前期工作
下面了解一下 Linux内核的 顶层 Makefile前期所做的工作。
1、版本号
顶层 Makefile 一开始就是 Linux 内核的版本号,如下所示:
1 VERSION = 4
2 PATCHLEVEL = 1
3 SUBLEVEL = 15
4 EXTRAVERSION =
可以看出, Linux 内核版本号为 4.1.15 。
2、MAKEFLAGS 变量
MAKEFLAGS 变量设置如下所示:
16 MAKEFLAGS += -rR --include-dir=$(CURDIR)
3、命令输出
Linux 编译的时候也可以通过“ V=1 ”来输出完整的命令,这个和 uboot 一样,相关代码如下所示:
69 ifeq ("$(origin V)", "command line")
70 KBUILD_VERBOSE = $(V)
71 endif
72 ifndef KBUILD_VERBOSE
73 KBUILD_VERBOSE = 0
74 endif
75
76 ifeq ($(KBUILD_VERBOSE),1)
77 quiet =
78 Q =
79 else
80 quiet=quiet_
81 Q = @
82 endif
4、静默输出
Linux 编译的时候使用“make -s”就可实现静默编译,编译的时候就不会打印任何的信息, 同 uboot 一样,相关代码如下:
87 ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4
88 ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
89 quiet=silent_
90 endif
91 else # make-3.8x
92 ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
93 quiet=silent_
94 endif
95 endif
96
97 export quiet Q KBUILD_VERBOSE
5、设置编译结果输出目录
Linux 编译的时候使用“ O=xxx ”即可将编译产生的过程文件输出到指定的目录中,相关代 码如下:
116 ifeq ($(KBUILD_SRC),)
117
118 # OK, Make called in directory where kernel src resides
119 # Do we want to locate output files in a separate directory?
120 ifeq ("$(origin O)", "command line")
121 KBUILD_OUTPUT := $(O)
122 endif
6、代码检查
Linux 也支持代码检查,使用命令“ make C=1 ”使能代码检查,检查那些需要重新编译的文件。“ make C=2 ” 用于检查所有的源码文件,顶层 Makefile 中的代码如下:
172 ifeq ("$(origin C)", "command line")
173 KBUILD_CHECKSRC = $(C)
174 endif
175 ifndef KBUILD_CHECKSRC
176 KBUILD_CHECKSRC = 0
177 endif
下一篇文章继续分析 Linux内核源码的 顶层Makefile所做的准备工作。