除了在 uboot 的顶层 Makefile 中,我们常常在子目录也会看到子 Makefile,这样是为了模块化,顶层 Makefile 可以调集各个文件夹中的子目录下的 Makefile。
一、Makefile 规则格式
(1)注释用 “#” 字符。
(2)在 Makefile 中的命令,必须要以 TAB 键开始。
目标:依赖文件集合
命令 // 命令列表中的每条命令必须以 TAB 键开始,不能使用空格!
二、引用其它的 Makefile
使用 include 关键字可以把别的 Makefile 包含进来,类似 C 语言的 #include。
语法:include < filename >
例:主目录下的 Makefile
all:
@echo "this is apple"
@echo "$(fruit)"
include ./subdir/Makefile // 这里用 include 把 subdir 子目录下的 Makefile 包含进来了
subdir 子目录下的 Makefile
fruit:= orange
others:
@echo "this is banana"
在主目录下执行 make others 命令之后,结果如下:
this is banana
有时,我们还需要向子 make 传递变量,使用 “export” 来导出要传递给子 make 的变量:
export VARIABLE // 导出变量给子 make
unexport VARIABLE // 不导出变量给子 make
注意:想让 make 不理那些无法读取的文件,而继续执行,可在 include 前加一个减号 “-”。
语法:-include < filename > // 无论 include 过程中出现什么错误,都不要报错继续执行,sinclude 作用和它一样
三、MAKEFLAGS 变量
“SHELL” 和 “MAKEFLAGS” 的值始终自动的传递给子 make。
如:MAKEFLAGS += -rR --include-dir=$(CURDIR)
-rR:禁止使用内置的隐含规则和变量定义
–include-dir:指明嵌套脚本的搜索路径
CURDIR:Makefile 中内置的标准变量,指当前的工作目录
四、make 工作时的执行步骤
1、读入所有的 Makefile
2、读入被 include 的其它 Makefile
3、初始化文件中的变量
4、推导隐晦规则,并分析所有规则
5、为所有的目标文件创建依赖关系链
6、根据依赖关系,决定哪些目标要重新生成
7、执行生成命令