gnu make 手册 学习笔记 C语言 / C++ 构建工具 part.5 函数 控制语句

5.函数,控制语句

make做了一些简单的函数,已知的列在下面,有简单用法。
中文名字仅仅是方便看。

5-1.函数

5-1-1.替换,函数$(subst from,to,text),
将text中匹配from的内容,替换为to的内容。

例子

.PHONY:print
print:
	@echo $(subst  ee, EE,feet_fault_bee)

在这里插入图片描述

5-1-2.替换,函数$(patsubst pattern,replacement,text)
类似上一个函数,特殊的是,使用空格将text切割,然后使用 %.后缀  的方式来匹配替换。
和变量中$(var:suffix=replacement)是很类似的。

例子

.PHONY:print
print:
	@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.a

remain    =$(filter %.c %.o,$(sources))

print: 	
	@echo  $(remain)

在这里插入图片描述

5-1-6.滤除,函数$(filter-out pattern…,text)
按照空格分隔text,将符合pattern的字符剔除,
sources =foo.c bar.o baz.s lib.a

remain =$(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)

结果是  bar baz

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)

结果是.c .c

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)
	recipe
else
	recipe
endif
ifneq (arg1,arg2)
	recipe
else
	recipe
endif
5-2-2.函数$(foreach var, pattern,text)
作为循环控制的函数
print:
	@echo $(foreach target,foo.c bar.o main,operate_$(target))

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值