学习u-boot 需要了解的makfile 相关知识
创始人
2025-06-01 21:37:06
0

一、常用函数

1. origin 函数

origin 函数的返回值就是变量来源。使用格式如下:

$(origin )

使用示例

ifeq ("$(origin V)", "command line")

这里判断变量 V 的来源是不是 command line。

2. filter 函数

$(filter ,)

函数功能

以 pattern 模式过滤 text 字符串中的单词,仅保留符合模式 pattern 的单词,可以有多个模式。

函数返回值

函数返回值就是符合pattern 的字符串。

应用示例

$(filter 4.%,$(MAKE_VERSION))

表示 从 字符串 MAKE_VERSION 中找出符合 “4.%” 的字符( % 为通配符),其中MAKE_VERSION 表示 make 的版本号,当前make 的版本号为 4.1,所以这个函数返回字符串:4.1。

3. firstword 函数

$(firstword )

函数用于取出 text 字符串中的第一个单词,函数的返回值就是获取到的单词。

应用示例

VAR1=hello world
test:@echo 'firstword=' $(firstword $(VAR1))

执行返回结果如下:

firstword= hello

4. words 函数

words 用于统计单词个数。函数格式如下:

$(words )

使用示例如下:

VAR1=hello world hello
test1:@echo "num:" $(words $(VAR1))

执行 make,输出 num:3

5. patsubst 函数

模式字符串替换函数。使用格式如下:

$(patsubst  ,  , )

功能

中单词(单词以 空格,Tab,回车,换行分割)符合模式 的部分,替换成 。

通配符

可以包括通配符 % ,表示任意长度的字符串。

转义字符

可以用 \ 进行转义。以 \% 来表示真正含义的 % 字符。

使用示例

makefile 文件如下定义

all:@echo $(patsubst %.c,%.o,bar.c test.c)

执行 make all ,输出

输出 bar.o test.o

二、环境变量

1. MAKECMDGOALS

MAKECMDGOALS 是 make 的一个环境变量,这个变量会保存你所指定的目标列表。

使用示例如下:

test1:@echo "test1"test2:@echo "test2"all:@echo "all target list:" $(MAKECMDGOALS)

执行: make test1 test2 all

输出如下:

test1
test2
all target list: test1 test2 all

2. MAKEFLAGS

MAKEFLAGS 用于记录 执行 make 命令时,输入的选项(OPTION)。主makefile 调用其他makefile 时,会自动将 MAKEFLAGS 变量传递过去。

make 的使用规则

make [OPTION]... [TARGET]...

使用示例

主makefile 定义如下:

all:@echo "main makefile:" $(MAKEFLAGS)@$(MAKE) -C sub@$(MAKE) -f ../makefile

sub 目录下的makefile 定义如下:

all:@echo "sub makefile:" $(MAKEFLAGS)

主目录上一层 makefile 定义如下:

all:@echo "outside makefile:" $(MAKEFLAGS)

在主目录下 执行: make -ikr

输出如下:

在这里插入图片描述

调用其他makefile 文件时,会自动在 命令选项(OPTION )中附加上 -w--print-directory)选项,用于打印进入和退出调用的makefile 路径,方便调试跟踪问题。

我们也可以使用 选项 --no-print-directory 禁止打印目录信息,也就禁止了自动添加 -w 选项。

例如,在主目录 下执行:

make -ikr --no-print-directory

输出如下:

在这里插入图片描述

三、make 命令选项

1. -f

-f FILE, --file=FILE, --makefile=FILE

指定make 程序执行的makefile 文件。默认情况下,在命令行输入 make ,make 程序会在当前目录下寻找 makefile 文件,并执行。

但是当我们要执行的 makefile 文件不在当前目录,或者文件名 不是 “makefile” 时,我们可以用命令选项 -f 指定要执行的makefile 文件。

使用示例如下所示:

make -f ./sub/makefile.build

2. -C

-C DIRECTORY, --directory=DIRECTORY

详情见下面章节

四、与子make 通信

1. 执行子目录makefile

主目录的 makefile 可以使用如下代码来编译子目录:

$(MAKE) -C subdir
  • 作用:进入 subdir 目录,并执行该目录下的 makefile
  • $(MAKE) 就是调用 make 命令
  • -C 指定子目录

2. 变量传递

2.1 export

使用 export 来导出要传递给子make 的变量。

export VAR1 VAR2 VAR3

2.2 unexport

使用unexport 声明不导出某个变量给子make

unexport VAR1 VAR2 VAR3

3. 特殊的变量

变量 SHELLMAKEFLAGS 除非使用 unexport 声明,否则的话在整个make的执行过程中,它们的值始终自动传递给子make。

相关内容

热门资讯

安卓子系统windows11,... 你知道吗?最近科技圈可是炸开了锅,因为安卓子系统在Windows 11上的兼容性成了大家热议的话题。...
电脑里怎么下载安卓系统,电脑端... 你有没有想过,你的电脑里也能装上安卓系统呢?没错,就是那个让你手机不离手的安卓!今天,就让我来带你一...
索尼相机魔改安卓系统,魔改系统... 你知道吗?最近在摄影圈里掀起了一股热潮,那就是索尼相机魔改安卓系统。这可不是一般的改装,而是让这些专...
安卓系统哪家的最流畅,安卓系统... 你有没有想过,为什么你的手机有时候像蜗牛一样慢吞吞的,而别人的手机却能像风一样快?这背后,其实就是安...
安卓最新系统4.42,深度解析... 你有没有发现,你的安卓手机最近是不是有点儿不一样了?没错,就是那个一直在默默更新的安卓最新系统4.4...
android和安卓什么系统最... 你有没有想过,你的安卓手机到底是用的是什么系统呢?是不是有时候觉得手机卡顿,运行缓慢,其实跟这个系统...
平板装安卓xp系统好,探索复古... 你有没有想过,把安卓系统装到平板上,再配上XP系统,这会是怎样一番景象呢?想象一边享受着安卓的便捷,...
投影仪装安卓系统,开启智能投影... 你有没有想过,家里的老式投影仪也能焕发第二春呢?没错,就是那个曾经陪你熬夜看电影的“老伙计”,现在它...
安卓系统无线车载carplay... 你有没有想过,开车的时候也能享受到苹果设备的便利呢?没错,就是那个让你在日常生活中离不开的iOS系统...
谷歌安卓8系统包,系统包解析与... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?这不,最近谷歌又发布了安卓8系统包,听说这个新...
微软平板下软件安卓系统,开启全... 你有没有想过,在微软平板上也能畅享安卓系统的乐趣呢?没错,这就是今天我要跟你分享的神奇故事。想象你手...
coloros是基于安卓系统吗... 你有没有想过,手机里的那个色彩斑斓的界面,背后其实有着一个有趣的故事呢?没错,我要说的就是Color...
安卓神盾系统应用市场,一站式智... 你有没有发现,手机里的安卓神盾系统应用市场最近可是火得一塌糊涂啊!这不,我就来给你好好扒一扒,看看这...
黑莓平板安卓系统升级,解锁无限... 亲爱的读者们,你是否还记得那个曾经风靡一时的黑莓手机?那个标志性的全键盘,那个独特的黑莓体验,如今它...
安卓文件系统采用华为,探索高效... 你知道吗?最近安卓系统在文件管理上可是有了大动作呢!华为这个科技巨头,竟然悄悄地给安卓文件系统来了个...
深度系统能用安卓app,探索智... 你知道吗?现在科技的发展真是让人惊叹不已!今天,我要给你揭秘一个超级酷炫的话题——深度系统能用安卓a...
安卓系统的分区类型,深度解析存... 你有没有发现,你的安卓手机里藏着不少秘密?没错,就是那些神秘的分区类型。今天,就让我带你一探究竟,揭...
安卓系统铠无法兑换,揭秘无法兑... 最近是不是有很多小伙伴在玩安卓系统的游戏,突然发现了一个让人头疼的问题——铠无法兑换!别急,今天就来...
汽车安卓系统崩溃怎么刷,一键刷... 亲爱的车主朋友们,你是否曾遇到过汽车安卓系统崩溃的尴尬时刻?手机系统崩溃还能重启,但汽车系统崩溃了,...
miui系统可以刷安卓p系统吗... 亲爱的手机控们,你是否对MIUI系统情有独钟,同时又对安卓P系统的新鲜功能垂涎欲滴?今天,就让我带你...