【makefile函数】makefile 常用函数汇总

makefile 函数格式:

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

参考文章: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 <pattern...>)

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

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

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

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

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

示例:

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

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

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

$(notdir <names...>)

示例:

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

4、suffix —— 获取文件后缀

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

$(suffix <names…>)

示例:

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

5、basename —— 去除文件后缀

$(basename  <names...>)

示例:

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

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

1、subst —— 直接替换字符

subst 直接将 <text> 中的字符 <src> 替换为字符 <dst>。

$(subst <src>,<dst>,<text>)

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

$(subst aa,AA,aabbaa aAfd)

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

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

函数调用原型如下:

# 将 <text> 中的 源格式 <src_pattern> 替换成目标格式 <dst_pattern>
ret = $(patsubst <src_pattern>,<dst_pattern>,<text>)

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

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

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

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

$(strip <string>)

示例:

$(strip, add.cpp bar.cpp )

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

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

$(findstring <dst>,<src>) 

示例:

$(findstring a,a b c) 

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

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

$(filter <pattern...>,<text>)

示例:

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

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

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

$(filter-out <pattern...>,<text>)

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

1、info —— 打印提示信息

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

$(info <text>)

示例:

$(info some debug info)

2、warning —— 打印报警信息

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

$(warning <text>)

 示例:

$(warning some warning info)

3、errror —— 打印错误信息

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

$(error <text>)

 示例:

$(error some error info)

四、其他函数

1、foreach —— 循环函数

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

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

示例: 

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

2、call —— 调用函数

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

$(call <expression>,<parm1>,<parm2>,<parm3>,...)

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

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

shell <commands>

示例:

$(shell ps ajx | grep test)

4、eval 

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

$(eval <text>)

猜你喜欢

转载自blog.csdn.net/challenglistic/article/details/129590846
今日推荐