九、UNIX-LINUX---Makefile笔记二-使用函数(1-2)-函数的调用语法-字符串处理函数

一、函数的调用方法

  • 调用函数

  • 使用 $(<function> <arguments1>,<arguments2>,…)
  • 使用 ${<function> <arguments1>,<arguments2>,…}
  • 函数与参数之间用 “ 空格 ”隔开
  • 参数与参数之间用 “ ,0 ”隔开
  • 例子
	comma :=, # 定义一个,
	empty := #定义一个空格
	space :=$(empty) $(empty)#引用2个空格
	foo   :=a b c
	# $(subst 被替换的字串,替换的字串,替换操作作用的字串)
	# 将foo值的 "a b c" 中的 “ ”空格替换成 ","
	foo   :=$(subst $(space),$(comma),$(foo))
	# foo的值为 a,b,c

二、字符串处理函数

  • 字符串替换函数- subst

  • $(subst <from>,<to>,<text>)

  • 功能:把字串<text>中的<from>字符串替换成<to>

  • 返回:函数返回被替换过后的字符串

  • 模式字符串替换函数- patsubst

  • $(patsubst <pattern>,<replacement>,<text> )

  • 功能:将<text>符合模式<pattern>的字符用 <replacement>字符来代替

  • 例子

# 把字串“x.c.c bar.c”符合模式[ %.c ]的单词体寒从[ %.o ]
# 返回结果是“x.c.o bar.o”
 $(patsubst %.c,%.o,x.c.c bar.c)
 
  • 与变量章节的知识点有点类似
	$(var:<pattern>=<replacement>)
	相当于
	$(patsubst <pattern>,<replacement>,$(var))
  • 去空格函数- strip

  • $(strip a b c )
  • 功能:去掉字符串<string>中开头和结尾的空字符
  • 返回: 返回被去掉空格的字符串值
  • 例子
# 把字符串“a b c ”去掉开头和结尾的空格,结果是“a b c”
	$(strip a b c )

  • 查找字符串函数- findstring

  • $(findstring <find>,<in>)
  • 功能:在字符串<in>中查找<find>字符串
  • 返回:如果找到,那么返回<find>,否则返回空字符串
  • 例子
# 在字符串“a b c”中查找a,返回值为“a”
	$(findstring a,a b c)
# 在字符串“a b c”中查找a,返回值为“”空字符串
	$(findstring a,b c)
  • 过滤函数- filter

  • $(filter <pattern…>,<text>)
  • 功能:以<pattern>模式过滤<text>字符串中的单词,保留符合模式<pattern>的单词
  • 可以有多个模式
  • 返回:返回符合模式<pattern>的字符串
  • 例子
	sources :=foo.c bar.c baz.s ugh.h
	foo : $(sources)
	cc $(filter %.c %.s,$(sources)) -o foo
# 其返回值是 foo.c bar.c baz.s
  • 反过滤函数- filter-out

  • $(filter-out <pattern…>,<text> )
  • 功能:以<pattern>模式过滤<text>字符串中的单词,
    去除符合模式<pattern>的单词,可以有多个模式
  • 返回:返回不符合模式<pattern>的字符串
  • 例子
	objects = main1.o foo.o main2.o bar.o
	mains = main1.o main2.o
	$(filter-out $(mains),$(objects))
# 	其返回值是 foo.o bar.o
  • 排序函数- sort

  • $(sort <list>)
  • 功能:给字符串<list>中的单词排序(升序)
  • 返回:返回排序后的字符串
  • 例子:
#返回值 bar foo lose 按第一个字母大小排升序
	$(sort foo bar lose)
  • 去单词函数- word

  • $(word <n>,<text>)
  • 功能:取字符串<text>中第<n>个单词 (从一开始)
  • 返回:返回字符串<text>中第<n>个单词,如果<n>比<text>中的单词数要大,
    那么返回字符串
  • 例子
# 返回值为 bar
	$(word 2,foo bar baz)
  • 取单词串函数- wordlist

  • $(wordlist <s>,<e>,<text>)
  • 功能:从字符串<text>中取<s>开始到<e>的单词串,<s>,<e>是数字
  • 返回:返回字符串<text>中从到的单词字串,如果<s>比<text>中的单词数要大,那么返回空字符串,
    如果<e>大于<text>的单词数,那么返回从<s>开始,到<text>接收的单词串
  • 例子
# 返回值是 “bar baz”
#					1,  23
	$(wordlist 2,3,foo bar baz)
  • 单词个数统计函数- words

  • $(words <text>)
  • 功能:统计<text>中字符串的单词个数
  • 返回:返回<text>中的单词数
  • 例子
# 返回值为 3
	$(words foo bar baz)
# 取出<text>的最后一个单词
	$(word $(words <text>),<text>)
  • 首单词函数- firstword

  • $(firstword <text>)
  • 功能:取字符串<text>的第一个单词
  • 返回:返回字符串<text>的第一个单词
  • 例子
# 返回值为 foo
	$(firstword foo bar)
  • 利用搜索路径来指定编译器对头文件的搜索路径参数 CFALGS
override CFLAGS += $(patsubst %-I%,$(subst:,,$(VPATH)))
  • 如果我们的"$(PATH)"值是 “ src:…/headers ”,那么
    ( p a t s u b s t (patsubst %,-I%, (patsubst(subst:,$(VPATH))) ”
    将返回“ -Isrc -I…/headers ”
  • 这正是cc或gcc搜索头文件路径的参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值