
本文共 2248 字,大约阅读时间需要 7 分钟。
Makefile中的函数使用手册
Makefile提供了丰富的函数功能,可帮助开发者在编写构建脚本时提升效率。这些函数的应用使得命令或规则更加灵活且具有智能。以下是Makefile支持的主要函数及其用途详细说明。
Function调用语法
函数调用与变量使用类似,都以“$”字符开头,语法为:
$(function_name arguments)
或
${function_name arguments}
函数名和参数之间以空格分隔,参数之间以逗号分隔。统一使用相同的括号类型(圆括号或花括号)会更为规范。
字符串处理函数
1. $(subst string_from string_to string_result)
功能:替换字符串中的从string_from到string_to部分为空string_result。示例:$(subst ee,EE,feet on the street)
将"feet on the street"中的"ee"替换为"EE",返回结果是"fEEt on the strEEt"。
2. $(patsubst pattern,string_from,string_to)
功能:按单词模式替换,pattern可以包含通配符“%”,表示任意长度字符串。替换时,保留原始单词结构。示例:$(patsubst %.c,%.o,src/foo.c)
可替换文件扩展名为.obj。
3. $(strip)
功能:去除字符串末尾和开头的空格。示例:$(strip a b c )
去除空格返回“a b c”。
4. $(findstring find_in string)
功能:在string中查找是否存在find_in,如果存在返回该字符串,否则返回空字符串。示例:$(findstring a,a b c)
和 $(findstring a,b c)
返回值分别为"a"和空串。
5. $(filter pattern... , text)
功能:按模式过滤text中的单词,保留符合条件的单词。示例:$(filter %.c %.s, src/foo.c)
提取符合条件的文件名。
6. $(filter-out pattern... , text)
功能:按模式反向过滤text中的单词。示例:$(filter-out *.o, src/foo.o)
剩余非.o文件。
7. $(sort)
功能:按升序排列字符串中的单词并去重。示例:$(sort foo bar lose)
返回“bar foo lose”。
文件名操作函数
这些函数主要用于文件路径的处理和管理。
1. $(dir names...)
功能:提取文件名序列中的目录部分。示例:$(dir src/foo.c hacks)
返回值为“src/ ./”。
2. $(notdir names...)
功能:提取文件名序列中的非目录部分。示例:$(notdir src/foo.c hacks)
返回值为“foo.c hacks”。
3. $(suffix names...)
功能:提取文件名序列中的文件后缀。示例:$(suffix src/foo.c src-1.0/bar.c hacks)
返回值为“.c .c”。
4. $(basename names...)
功能:提取文件名序列中的文件前缀。示例:$(basename src/foo.c src-1.0/bar.c hacks)
返回值为“src/foo src-1.0/bar hacks”。
5. $(addsuffix suffix, names...)
功能:将后缀suffix添加到names中的每个文件名后。示例:$(addsuffix .c,foo bar)
返回值为“foo.c bar.c”。
6. $(addprefix prefix, names...)
功能:将前缀prefix添加到names中的每个文件名后。示例:$(addprefix src/,foo bar)
返回值为“src/foo src/bar”。
7. $(join list1, list2)
功能:将list2中的内容依次添加到list1对应的文件名后。示例:$(join aaa bbb, 111 222 333)
返回值为“aaa111 bbb222 333”。
流程控制函数
1. foreach (var, list, text)
功能:对list中的每个元素进行处理,并将处理结果存储到变量var中,最后返回整体结果。示例:$(foreach n, $(names), $(n).o)
将列表中每个元素扩展为文件依赖。
2. if condition, [then-part], [else-part]
功能:条件语句,若条件满足按then-part处理,否则按else-part处理。示例:$(if $(error),,.backup)
若存在错误则处理备份文件。
调控Make函数
1. $(error Text)
函数:生成致命错误,显示指定的文本信息。
2. $(warning Text)
函数:显示警告信息,不终止Make程序。
参考资源
通过合理搭配以上函数,你可以实现复杂的文件管理、构建依赖关系以及自动化任务的执行。这些函数为Makefile编写更加灵活的构建脚本提供了强大支持。
发表评论
最新留言
关于作者
