linux 顶层 Makefile 详解

41 篇文章 6 订阅
10 篇文章 0 订阅

Linux 的顶层 Makefile 和 uboot 的顶层 Makefile 非常相似,因为 uboot 参考了 Linux,前 602行几乎一样,所以前面部分我们大致看一下就行了。

1、版本号

顶层 Makefile 一开始就是 Linux 内核的版本号
在这里插入图片描述

2、 MAKEFLAGS 变量

MAKEFLAGS 变量设置如下所示:
在这里插入图片描述

3、命令输出

Linux 编译的时候也可以通过“V=1”来输出完整的命令,这个和 uboot 一样
在这里插入图片描述

4、静默输出

Linux 编译的时候使用“make -s”就可实现静默编译,编译的时候就不会打印任何的信息,同 uboot 一样
在这里插入图片描述

5、设置编译结果输出目录

Linux 编译的时候使用“O=xxx”即可将编译产生的过程文件输出到指定的目录中,相关代码如下:
在这里插入图片描述

6、代码检查

Linux 也支持代码检查,使用命令“make C=1”使能代码检查,检查那些需要重新编译的文件。“make C=2”用于检查所有的源码文件,顶层 Makefile 中的代码如下:
在这里插入图片描述

7、模块编译

Linux 允许单独编译某个模块,使用命令“make M=dir”即可,旧语法“make SUBDIRS=dir”也是支持的。顶层 Makefile 中的代码如下:

在这里插入图片描述

8、设置目标架构和交叉编译器

同 uboot一样, Linux编译的时候需要设置目标板架构ARCH 和交叉编译器 CROSS_COMPILE,在顶层 Makefile 中代码如下:
在这里插入图片描述
为了方便,一般直接修改顶层 Makefile 中的 ARCH 和 CROSS_COMPILE,直接将其设置为对应的架构和编译器,比如本教程将 ARCH 设置为为 arm, CROSS_COMPILE 设置为 armlinux-gnueabihf-,如下所示:

252 ARCH ?= arm
253 CROSS_COMPILE ?= arm-linux-gnueabihf-

9、调用 scripts/Kbuild.include 文件

同 uboot 一样, Linux 顶层 Makefile 也会调用文件 scripts/Kbuild.include,顶层 Makefile 相应代码如下:
在这里插入图片描述

10、交叉编译工具变量设置

顶层 Makefile 中其他和交叉编译器有关的变量设置如下
在这里插入图片描述
11、头文件路径变量
顶层 Makefile 定义了两个变量保存头文件路径: USERINCLUDE 和 LINUXINCLUDE,相关代码如下:
在这里插入图片描述
第 381~386 行是 USERINCLUDE 是 UAPI 相关的头文件路径,第 390~396 行是LINUXINCLUDE 是 Linux 内核源码的头文件路径。重点来看一下 LINUXINCLUDE,其中srctree=., hdr-arch=arm, KBUILD_SRC 为空,因此,将 USERINCLUDE 和 LINUXINCLUDE 展开以后为:

USERINCLUDE := \
-I./arch/arm/include/uapi \
-Iarch/arm/include/generated/uapi \
-I./include/uapi \
-Iinclude/generated/uapi \
-include ./include/linux/kconfig.h
LINUXINCLUDE := \
-I./arch/arm/include \
-Iarch/arm/include/generated/uapi \
-Iarch/arm/include/generated \
-Iinclude \
-I./arch/arm/include/uapi \
-Iarch/arm/include/generated/uapi \
-I./include/uapi \
-Iinclude/generated/uapi \
-include ./include/linux/kconfig.h

12、导出变量

顶层 Makefile 会导出很多变量给子 Makefile 使用,导出的这些变量如下:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值