如何引用其它的 Makefile

除了在 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、执行生成命令

你可能感兴趣的:(uboot,linux,makefile,嵌入式)