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
原型(不同格式之间使用空格隔开)
$(wildcard )
示例:获取当前目录下所有的 .cpp 文件和 test目录下所有的 .cpp 文件
$(wildcard *.cpp test/*.cpp)
获取文件所在目录,本质是获取最后一个反斜杠 '/' 以前的内容。如果没有反斜杠 '/' ,返回 ./
$(dir ) # 不同文件名之间以空格隔开
示例:
$(dir src/foo.c sum.txt)
获取一个文件路径的非目录部分,也可以理解为获取文件名(含后缀),本质是获取最后一个反斜杠 '/' 之后的内容。如果没有反斜杠,直接返回本身。
$(notdir )
示例:
$(notdir src/foo.c sum.txt)
取出文件名的后缀,如果文件无后缀,返回空字符。注意其本质并非是单纯获取到最后一个点符号 '.' 之后的内容。
$(suffix )
示例:
$(suffix src/foo.c src-1.0/bar.c hacks)
$(basename )
示例:
$(basename src/foo.c src-1.0/bar.c hacks)
subst 直接将
$(subst ,,)
示例:注意逗号两边不要有空格
$(subst aa,AA,aabbaa aAfd)
patsubs 函数的作用是使用目标字符(格式)替换源字符(格式),函数返回替换以后的结果,常常搭配通配符 % 使用,% 表示任意长度的字串,如果
函数调用原型如下:
# 将 中的 源格式 替换成目标格式
ret = $(patsubst ,,)
示例:将所有满足后缀为 .cpp 格式的字符串替换为 后缀为 .o 格式
$(patsubst %.cpp,%.o,add.cpp bar.cpp)
这里所说的空白字符可以是 空格键 或者 Tab 产生的
$(strip )
示例:
$(strip, add.cpp bar.cpp )
在字符串
$(findstring ,)
示例:
$(findstring a,a b c)
保留指定格式的字符串,指定的格式可以有多个,返回保留的字符串
$(filter ,)
示例:
sources := foo.c bar.c baz.s ugh.h
result := $(filter %.c %.s,${sources})
去除指定格式的字符串,指定的格式可以有多个,返回去除以后的结果
$(filter-out ,)
向标准输出打印文本
$(info )
示例:
$(info some debug info)
向标准输出打印文本
$(warning )
示例:
$(warning some warning info)
向标准错误输出打印文本
$(error )
示例:
$(error some error info)
将 中的参数逐一取出放到 变量中,然后再执行
$(foreach ,,)
示例:
names := a b c d
files := $(foreach n,${names},$(n).o)
makefile中可以自定义函数,call 的作用就是调用自定义的函数或者表达式,也可以传参调用,关于函数的自定义和调用,可以参考:
$(call ,,,,...)
shell 可以执行操作系统的shell命令,返回的是命令行命令的执行结果
shell
示例:
$(shell ps ajx | grep test)
eval 可以将
$(eval )