学习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。

相关内容

热门资讯

我来教大家“掼蛋大师辅助器ap... 亲,掼蛋大师这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,掼蛋大师的开挂软件,名...
我来教大家“开心联盟辅助器ap... 您好,开心联盟这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
我来教大家“友愉棋牌辅助器ap... 您好,友愉棋牌这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
我来教大家“全盛棋牌辅助器ap... 亲,全盛棋牌这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,全盛棋牌的开挂软件,名...
我来教大家“情怀三三麻将辅助器... 我来教大家“情怀三三麻将辅助器app官方下载最新版本更新”详细分享开挂一、情怀三三麻将AI软件牌型概...
我来教大家“无锡好运麻将辅助器... 亲,无锡好运麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,无锡好运麻将的开挂...
我来教大家“推筒子辅助器app... 您好,推筒子这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打牌...
我来教大家“比奇堡辅助器app... 我来教大家“比奇堡辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方神...
我来教大家“新兴茶苑辅助器ap... 我来教大家“新兴茶苑辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方...
我来教大家“欢乐互动辅助器ap... 我来教大家“欢乐互动辅助器app官方下载最新版本更新”详细分享开挂1、让任何用户在无需AI插件第三方...
我来教大家“东方互娱辅助器ap... 亲,东方互娱这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,东方互娱的开挂软件,名...
我来教大家“天天乐清麻将辅助器... 我来教大家“天天乐清麻将辅助器app官方下载最新版本更新”详细分享开挂一、天天乐清麻将AI软件牌型概...
我来教大家“唐三彩辅助器app... 我来教大家“唐三彩辅助器app官方下载最新版本更新”详细分享开挂一、唐三彩AI软件牌型概率发牌机制”...
我来教大家“Y0辅助器app官... 我来教大家“Y0辅助器app官方下载最新版本更新”详细分享开挂一、Y0AI软件牌型概率发牌机制”必胜...
我来教大家“天天互娱辅助器ap... 亲,天天互娱这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,天天互娱的开挂软件,名...
我来教大家“悟空竞技麻将辅助器... 亲,悟空竞技麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,悟空竞技麻将的开挂...
我来教大家“情怀开化麻将辅助器... 我来教大家“情怀开化麻将辅助器app官方下载最新版本更新”详细分享开挂一、情怀开化麻将AI软件牌型概...
我来教大家“龙炎互娱辅助器ap... 我来教大家“龙炎互娱辅助器app官方下载最新版本更新”详细分享开挂一、龙炎互娱AI软件牌型概率发牌机...
我来教大家“闲逸碰胡辅助器ap... 亲,闲逸碰胡这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,闲逸碰胡的开挂软件,名...
我来教大家“友聚麻将辅助器ap... 我来教大家“友聚麻将辅助器app官方下载最新版本更新”详细分享开挂一、友聚麻将AI软件牌型概率发牌机...