GNU Make manual 学习笔记 C语言 / c++ 构建工具
5.函数,控制语句5-1.函数5-1-1.替换,函数$(subst from,to,text),5-1-2.替换,函数$(patsubst pattern,replacement,text)5-1-3.除空格,函数$(strip string)5-1-4.查找字符串,函数$(findstring find , in)5-1-5.过滤匹配,函数$(filter pattern...,text)5-1-6.滤除,函数$(filter-out pattern...,text)5-1-7.排序,函数$(sort list)5-1-8.查找位置,函数$(word n ,text)5-1-9.部分获取字符串,函数$(wordlist s,e,text)5-1-10.获取字符串数量,函数$(words text)5-1-11.首字符串,函数$(firstword names.....)5-1-12.末字符串,函数$(lastword names...)5-1-13.路径名,函数$(dir names...)5-1-14.文件名,函数$(notdir names...)5-1-15.后缀,函数$(suffix names...)5-1-16.文件路径,函数$(basename names...)5-1-17.添加后缀,函数$(addsuffix suffix,names...)5-1-18.添加前缀,函数$(addprefix prefix,namex...)5-1-19.字符串连接,函数$(join list1,list2)5-1-20.真实路径,函数$(realpath names...)5-1-21.绝对路径,函数$(abspath names...)5-1-22.文件操作,函数$(file op filename[,text])5-1-23.shell调用,函数$(shell )5-2.条件控制语句5-2.1条件语句,if/else5-2-2.函数$(foreach var, pattern,text)5.函数,控制语句
make做了一些简单的函数,已知的列在下面,有简单用法。中文名字仅仅是方便看。
5-1.函数
5-1-1.替换,函数$(subst from,to,text),
将text中匹配from的内容,替换为to的内容。
例子
.PHONY:printprint:@echo $(subst ee, EE,feet_fault_bee)
5-1-2.替换,函数$(patsubst pattern,replacement,text)
类似上一个函数,特殊的是,使用空格将text切割,然后使用 %.后缀 的方式来匹配替换。和变量中$(var:suffix=replacement)是很类似的。
例子
.PHONY:printprint:@echo $(patsubst %.c,%.o, x.c.c bar.c foo)
去除空格
5-1-3.除空格,函数$(strip string)
去除两边的空格
print:@echo $(strip "abc")
5-1-4.查找字符串,函数$(findstring find , in)
在字符串中查找指定的字符串,找到就返回这个值,需要完全匹配
print:@echo $(findstring d ,a b c)@echo $(findstring a ,b c tea a)
5-1-5.过滤匹配,函数$(filter pattern…,text)
过滤字符,返回符合pattern的字符集
sources :=foo.c bar.o baz.s lib.aremain =$(filter %.c %.o,$(sources))print: @echo $(remain)
5-1-6.滤除,函数$(filter-out pattern…,text)
按照空格分隔text,将符合pattern的字符剔除,
sources =foo.c bar.o baz.s lib.aremain =$(filter-out %.c %.o,$(sources))print: @echo $(remain)
5-1-7.排序,函数$(sort list)
按照自然顺序排序print: @echo $(sort foo boo aoo too coo boo 1 5 4)
5-1-8.查找位置,函数$(word n ,text)
按照空格分隔字符串,返回第n个值,从1开始
print:@echo $(word 2,foo bar baz)
5-1-9.部分获取字符串,函数$(wordlist s,e,text)
空格分隔,从第s位开始,到e位结束,获取字符串,角标从1开始
print:@echo $(wordlist 2,3, foo bar baz avd abc rgd)
5-1-10.获取字符串数量,函数$(words text)
返回字符串中用空格分隔的字符串的数量
print:@echo $(words abc aaa vvv bbb)
5-1-11.首字符串,函数$(firstword names…)
将字符串用空格分隔,返回第一结果
print:@echo $(firstword first name bcd efg ttt ggg hhh)
5-1-12.末字符串,函数$(lastword names…)
将字符串用空格分隔,返回最后一个结果
print:@echo $(lastword abc ggg hhh jjj last)
5-1-13.路径名,函数$(dir names…)
根据传入的字符,做一个相对路径
print:@echo $(dir src/foo.c lib/api.c main.c)
5-1-14.文件名,函数$(notdir names…)
根据传入的字符做一个去除路径的文件名
print:@echo $(notdir src/foo.c lib/api.c main.c)
5-1-15.后缀,函数$(suffix names…)
返回后缀
print:@echo $(suffix src/foo.c src-1.0/bar.c main)
5-1-16.文件路径,函数$(basename names…)
返回除了后缀的名字,包括路径
print:@echo $(basename src/foo.c src-1.0/bar.o main)
5-1-17.添加后缀,函数$(addsuffix suffix,names…)
添加后缀
5-1-18.添加前缀,函数$(addprefix prefix,namex…)
添加前缀
print:@echo $(addsuffix .c, foo bar) @echo $(addprefix src/, foo bar)
5-1-19.字符串连接,函数$(join list1,list2)
连接连个字符串
print:@echo $(join a b c,.a .o .c)
5-1-20.真实路径,函数$(realpath names…)
将文件的真实路径返回,不会有相对路径的字符 . 或者.. 如果文件存在就返回路径,不存在就返回空
5-1-21.绝对路径,函数$(abspath names…)
返回文件的绝对路径,不管文件是否真实存在,会使用这个名字和当前路径结合
print:@echo $(realpath foo.c main.c)@echo $(realpath src/foo.c src/main.c)@echo $(abspath foo.c main.c)
5-1-22.文件操作,函数$(file op filename[,text])
文件函数op有> 覆盖,就是文件开头开始重写这个文件>> append,在文件的结束接着写< 读取这个文件
for_read.txt
some_message
print:@echo $(file < for_read.txt)
5-1-23.shell调用,函数$(shell )
就是使用shell能用的命令
print:@echo $(shell echo *.c)#会在当前路径找.c后缀的文件并打印出来
5-2.条件控制语句
5-2.1条件语句,if/else
ifeq (arg1,arg2)recipeelserecipeendif
ifneq (arg1,arg2)recipeelserecipeendif
5-2-2.函数$(foreach var, pattern,text)
作为循环控制的函数
print:@echo $(foreach target,foo.c bar.o main,operate_$(target))
如果觉得《gnu make 手册 学习笔记 C语言 / C++ 构建工具 part.5 函数 控制语句》对你有帮助,请点赞、收藏,并留下你的观点哦!