糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > gnu make 手册 学习笔记 C语言 / C++ 构建工具 part.5 函数 控制语句

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

时间:2019-05-19 05:25:05

相关推荐

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

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 函数 控制语句》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。