【makefile函数】makefile 常用函数汇总
迪丽瓦拉
2025-05-30 08:16:27
0次

makefile 函数格式:

# 基本格式: $(函数名, 参数列表...)
# 形参列表:不同参数之间使用逗号隔开
$(, ,  ...)

参考文章:Makefile函数 - 腾讯云开发者社区-腾讯云


目录

一、名称处理函数

1、wildcard —— 获取指定格式的文件列表

2、dir —— 获取文件所在目录

3、notdir —— 获取文件路径非目录部分

4、suffix —— 获取文件后缀

5、basename —— 去除文件后缀

二、字符串替换与分析函数

1、subst —— 直接替换字符

2、patsubst —— 按格式替换字符

3、strip —— 去掉开头和结尾的空白字符

4、findstring —— 在某个字串中查找指定字符串

5、filter —— 保留指定格式的字符串

6、filter-out —— 去除指定格式的字符串

三、控制函数(信息打印函数)

1、info —— 打印提示信息

2、warning —— 打印报警信息

3、errror —— 打印错误信息

四、其他函数

1、foreach —— 循环函数

2、call —— 调用函数

3、shell —— 执行命令行命令

4、eval 


一、名称处理函数

1、wildcard —— 获取指定格式的文件列表

原型(不同格式之间使用空格隔开)

$(wildcard )

示例:获取当前目录下所有的 .cpp 文件和 test目录下所有的 .cpp 文件

$(wildcard *.cpp test/*.cpp)

2、dir —— 获取文件所在目录

获取文件所在目录,本质是获取最后一个反斜杠 '/' 以前的内容。如果没有反斜杠 '/' ,返回 ./

$(dir )    # 不同文件名之间以空格隔开

示例:

$(dir src/foo.c sum.txt)

3、notdir —— 获取文件路径非目录部分

获取一个文件路径的非目录部分,也可以理解为获取文件名(含后缀),本质是获取最后一个反斜杠 '/' 之后的内容。如果没有反斜杠,直接返回本身。

$(notdir )

示例:

$(notdir src/foo.c sum.txt)

4、suffix —— 获取文件后缀

取出文件名的后缀,如果文件无后缀,返回空字符。注意其本质并非是单纯获取到最后一个点符号 '.' 之后的内容。

$(suffix )

示例:

$(suffix src/foo.c src-1.0/bar.c hacks)

5、basename —— 去除文件后缀

$(basename  )

示例:

$(basename src/foo.c src-1.0/bar.c hacks)

二、字符串替换与分析函数

1、subst —— 直接替换字符

subst 直接将 中的字符 替换为字符 。

$(subst ,,)

 示例:注意逗号两边不要有空格

$(subst aa,AA,aabbaa aAfd)

2、patsubst —— 按格式替换字符

patsubs 函数的作用是使用目标字符(格式)替换源字符(格式),函数返回替换以后的结果,常常搭配通配符 % 使用,% 表示任意长度的字串,如果 和   都包含 % ,那么此时 % 表示的字符内容是一样的。

函数调用原型如下:

# 将  中的 源格式  替换成目标格式 
ret = $(patsubst ,,)

示例:将所有满足后缀为 .cpp 格式的字符串替换为 后缀为 .o 格式

$(patsubst %.cpp,%.o,add.cpp bar.cpp)

3、strip —— 去掉开头和结尾的空白字符

这里所说的空白字符可以是 空格键 或者 Tab 产生的

$(strip )

示例:

$(strip, add.cpp bar.cpp )

4、findstring —— 在某个字串中查找指定字符串

在字符串 中查找目标字符或者字符串 ,如果找到了就返回对应字符,如果没有找到返回空字符。

$(findstring ,) 

示例:

$(findstring a,a b c) 

5、filter —— 保留指定格式的字符串

保留指定格式的字符串,指定的格式可以有多个,返回保留的字符串 

$(filter ,)

示例:

sources := foo.c bar.c baz.s ugh.h
result := $(filter %.c %.s,${sources})

6、filter-out —— 去除指定格式的字符串

去除指定格式的字符串,指定的格式可以有多个,返回去除以后的结果

$(filter-out ,)

三、控制函数(信息打印函数)

1、info —— 打印提示信息

向标准输出打印文本 ,用于输出调试信息,make继续执行

$(info )

示例:

$(info some debug info)

2、warning —— 打印报警信息

向标准输出打印文本 ,用于输出警告信息。make继续执行

$(warning )

 示例:

$(warning some warning info)

3、errror —— 打印错误信息

向标准错误输出打印文本  ,用于输出指明错误信息。make停止执行。

$(error )

 示例:

$(error some error info)

四、其他函数

1、foreach —— 循环函数

将 中的参数逐一取出放到 变量中,然后再执行 中的表达式。

  • 循环执行中:每执行一次循环都会返回一个字符串,foreach循环会将返回的字符串汇总,不同字符串通过空格分隔
  • 循环执行结束:当整个循环结束的时候,返回汇总的字符串(不同字串以空格分隔)
$(foreach ,,)

示例: 

names := a b c d
files := $(foreach n,${names},$(n).o)

2、call —— 调用函数

makefile中可以自定义函数,call 的作用就是调用自定义的函数或者表达式,也可以传参调用,关于函数的自定义和调用,可以参考:

$(call ,,,,...)

3、shell —— 执行命令行命令

shell 可以执行操作系统的shell命令,返回的是命令行命令的执行结果

shell 

示例:

$(shell ps ajx | grep test)

4、eval 

eval 可以将 中的内容作为makefile的一部分,然后按照makefile的语法解析这些内容,无返回值。该函数在执行时会对参数展开两次,可以理解为第一次是eval函数检查语法,第二次是解析 内容。

$(eval )

相关内容

热门资讯

AI做攻略、“双向奔赴”……国... 本文转自:人民网人民网记者 许维娜今年国庆假期,AI(人工智能)成了不少年轻人的“旅行搭子”。行前做...
合肥的这个“梗”, 翻篇了 社交平台的评论区,曾长期流传一句专属于合肥的黑色幽默。有人问合肥哪里好玩,本地网友半开玩笑地回复:合...
7万+旅游中高层都在的群,今天... 做旅游这行,资源卡位、渠道互通、项目落地——往往就差一个“对的机会”。我们的行业社群已聚集70,00...
一场帐篷音乐节,如何让井研从“... 帐篷音乐节现场封面新闻记者 周洪攀10月的研溪湿地,晚风里裹着柑橘的清甜与民谣的回响。夜幕降临,10...
白鹤翩翩落星愿,上海迪士尼度假... 10月9日,世界候鸟日前夕,上海迪士尼度假区星愿公园的湖风里多了一分白鹤的灵动。三座白鹤雕塑正式揭幕...
成都锦江边赏初秋枫叶飘飘 目前,成都锦江边国华街枫叶树红了。近年来,国华街附近的几条街都栽种了红枫树,是城区较集中看枫叶的点位...
GBTA:商务旅行正在复苏,但... 亚太正在成为全球商务旅行增长的重要引擎。在经历疫情后的快速反弹之后,全球商务旅行正在进入一个新的增长...
从景区焕新到节赛引流 邹城双节... 齐鲁网·闪电新闻10月9日讯 中秋、国庆“双节”假期,邹城市文化和旅游局提前谋划、周密部署,立足自身...
江山如此多娇 且看石楼今朝 金秋十月,黄河岸畔秋意盎然,丰收盛会喜迎国庆。本次石楼国庆文旅活动以“江山如此多娇,且看石楼今朝”为...
海南国庆假期接待游客475.4... 2026年国庆假期,海南接待游客475.40万人次,较2025年增长13.1%,较2024年增长15...