《跟我一起学makefile》学习笔记(五)

学习记录(对应文档的p41-p50)

一、示例
    条件 ifeq、else、endif
libs_for_gcc = -lgnu  
normal_libs =  
 
foo: $(objects)  
ifeq ($(CC),gcc)  
$(CC) -o foo $(objects) $(libs_for_gcc)
else  
$(CC) -o foo $(objects) $(normal_libs)
endif  
    关键字:ifeq、ifneq、ifdef、ifndef
第九部分 使用函数
一、函数的调用语法
$(<function> <arguments>)
或${<function> <arguments>}
二、字符串处理函数
1、subst字符串替换
$(subst <from>, <to>, <text>)
示例:$(subst ee,EE,feet on the street)
把“feet on the street”中的“ee”替换成“EE”
2、patsubst模式字符串替换
$(patsubst <pattern>,<replacement>,<text>)  
查找<text>中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式<pattern>,
如果匹配,以<replacement>替换。
<pattern>可以包括通配符“%”, 表示任意长度的字串。
如果<replacement>中也包含“%”,<replacement>中的这个“%”将是<pattern>中的那个“%”所代表的字串。
示例:$(patsubst %.c,%.o,x.c.c bar.c)  
把字串“x.c.c bar.c”符合模式[%.c]的单词替换成[%.o],返回结果是“x.c.o bar.o”  
3、strip去掉空格函数
$(strip <string>)
去掉string字串中开头和结尾的空字符
4、findstring
$(findstring <find>, <in>)
在in中查找find
5、filter过滤函数
$(filter <pattern>, <text>)
以<pattern>模式过滤<text>字符串中的单词,保留符合模式<pattern>的单词。可以
有多个模式。
6、filter-out反过滤函数
$(filter-out <pattern...>,<text>)  
以<pattern>模式过滤<text>字符串中的单词,去除符合模式<pattern>的单词。可以
有多个模式
7、sort
$(sort <list>)   
给字符串<list>中的单词排序(升序) 。    
sort函数会去掉<list>中相同的单词。  
8、word取单词函数
$(word <n>,<text>)     
取字符串<text>中第<n>个单词。 (从一开始)  
9、wordlist取单词串函数
$(wordlist <s>,<e>,<text>)    
从字符串<text>中取从<s>开始到<e>的单词串。
<s>和<e>是一个数字。  
10、words单词个数统计函数
$(words <text>)   
统计<text>中字符串中的单词个数。  
要取<text>中最后的一个单词$(word $(words <te  
xt>),<text>)
11、firstword
$(firstword <text>)   
取字符串<text>中的第一个单词。  
12、字符串函数实例  
以上,是所有的字符串操作函数,如果搭配混合使用,可以完成比较复杂的功能。
现实中应用的例子。make 使用“VPATH”变量来指定“依赖文件”的搜索路径。
利用这个搜索路径来指定编译器对头文件的搜索路径参数 CFLAGS,
override CFLAGS += $(patsubst %,-I%,$(subst :, ,$(VPATH)))   
如 果 我 们 的 “$(VPATH)” 值 是 “src:../headers” , 那 么 “$(patsubst
%,-I%,$(subst :, ,$(VPATH)))”将返回“-Isrc -I../headers”,这正是 cc 或 gcc 搜索
头文件路径的参数。
三、文件名操作函数
1、dir
$(dir <names...>)
从文件名序列<names>中取出目录部分。目录部分是指最后一个反斜杠(“/”)之前
的部分。如果没有反斜杠,那么返回“./”
2、notdir取文件
$(notdir <names...>)
从文件名序列<names>中取出非目录部分
3、suffix取后缀
$(suffix <names...>)
从文件名序列<names>中取出各个文件名的后缀
4、basename取前缀
$(basename <names...>)  
从文件名序列<names>中取出各个文件名的前缀    
5、addsuffix 加后缀
$(addsuffix <suffix>,<names...>)   
把后缀<suffix>加到<names>中的每个单词后面。  
6、addprefix 加前缀
$(addprefix <prefix>,<names...>)  
把前缀<prefix>加到<names>中的每个单词前面。  
7、join
$(join <list1>, <list2>)
把<list2>中的单词对应地加到<list1>的单词后面。如果<list1>的单词个数要比
<list2>的多,那么,<list1>中的多出来的单词将保持原样。如果<list2>的单词个数要比
<list1>多,那么,<list2>多出来的单词将被复制到<list2>中。  
示例:$(join aaa bbb , 111 222 333)返回值是“aaa111 bbb222 333”
四、foreach函数
用来做循环用的
$(foreach <var>, <list>, <text>)
    把参数<list>中的单词逐一取出放到参数<var>所指定的变量中,
然后再执行<text>所包含的表达式。每一次<text>会返回一个字符串,循环过程中,<text>
的所返回的每个字符串会以空格分隔,最后当整个循环结束时,<text>所返回的每个字符串
所组成的整个字符串(以空格分隔)将会是 foreach 函数的返回值。
五、if函数
$(if <condition>, <then=part>)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值