Makefile内嵌函数
subst字符串替换函数
$(subst <from>, <to>, <text>)
,把<text>
中的<from>
字符串替换成<to>
,返回被替换过的字符串
SRC:=/mnt/hgfs/share/123
DES:=$(subst /mnt,/root,$(SRC)) #ATTENTION:是,/root不是, /root
all:
@echo $(SRC)
@echo $(DES)
/mnt/hgfs/share/123
/root/hgfs/share/123
patsubst模式字符串替换函数
$(patsubst <pattern>, <replacement>, <text>)
,查找<text>
中的单词(单词以 空格,Tab,回车 分隔)是否符合模式<pattern>
,符合的话,则以<replacement>
替换,这里,<pattern>
可以包括通配符 %
表示任意长度的字符串,如果<replacement>
中也包含 %
, 则 <replacement>
中的这个 %
将是 <pattern>
中的那个 %
所代表的字符串
SRC:=/mnt/hgfs/share/123
DES:=$(patsubst %/123,%/456,$(SRC))
all:
@echo $(SRC) #Note:shell可不支持@
@echo $(DES)
/mnt/hgfs/share/123
/mnt/hgfs/share/456
strip
$(strip a b c)
把字符串去掉开头和结尾的空格,结果是 “a b c”
DES:=$(strip 12,43 ) #参数字符串是从1开始的,能去掉最后一个空格
DES:=$(strip " 12,43 ") #参数字符串是从空格开始的,能去掉最后一个空格
all:
@echo $(DES)
/mnt/hgfs/share/123
12,43
findstring查找字符串函数
$(findstring <find>, <in>)
,在字符串<in>
中查找<find>
,如果找到,就返回<find>
,否则返回空
SRC:=/mnt/hgfs/share/123
DES:=$(findstring /mnt,$(SRC))
all:
@echo $(SRC)
@echo $(DES)
/mnt/hgfs/share/123
/mnt
filter过滤函数
$(filter <pattern…>, <text>)
,以<pattern>
模式过滤<text>
字符串的单词,保留<pattern
模式的单词,可以有多个<pattern>
SRC:= 123.c 789.c 456.s eee.j
#DES:=$(filter %.c,%.s,$(SRC)) #WRONG!!!
DES:=$(filter %.c %.s,$(SRC))
all:
@echo $(SRC)
@echo $(DES)
123.c 789.c 456.s eee.j
123.c 789.c 456.s
filter-out反过滤函数
$(filter-out <pattern…> ,<text>)
,以<pattern>
模式过滤<text>
字符串的单词,去除<pattern>
模式的单词,可以有多个<pattern>
SRC:= 123.c 789.c 456.s eee.j
DES:=$(filter-out %.c,$(SRC))
all:
@echo $(SRC)
@echo $(DES)
123.c 789.c 456.s eee.j
456.s eee.j
sort排序函数
$(sort <list>)
,给字符串<list>
中的单词(不是字符)按升序排序
SRC:= 123.c 789.c 456.s eee.j
DES:=$(sort $(SRC))
all:
@echo $(SRC)
@echo $(DES)
123.c 789.c 456.s eee.j
123.c 456.s 789.c eee.j
word
$(word <n>,<text>)
取单词函数,取字符串<text>
中的第<n>
个单词,返回字符串<text>
中的第n个单词,如果n比<text>
中的单词要大,那么返回空字符串
SRC:= 123.c 789.c 456.s eee.j
DES:=$(word 2,$(SRC))
all:
@echo $(SRC)
@echo $(DES)
123.c 789.c 456.s eee.j
789.c
wordlist取单词串函数
$(wordlist <s>, <e>, <text>)
,从字符串<text>
中取从<s>
开始到<e>
的单词串,<s>
和<e>
是一个数字,返回取出的单词串,如果s大于<text>
,那么返回空,如果e大于<text>
,则返回从s开始到<text>
结尾的字符串
SRC:= 123.c 789.c 456.s eee.j
DES:=$(wordlist 2,4,$(SRC))
all:
@echo $(SRC)
@echo $(DES)
123.c 789.c 456.s eee.j
789.c 456.s eee.j
words单词个数统计函数
$(words <text>)
,返回单词数
SRC:= 123.c 789.c 456.s eee.j
DES:=$(words $(SRC))
all:
@echo $(SRC)
@echo $(DES)
123.c 789.c 456.s eee.j
4
firstword首单词函数
$(firstword <text>)
,返回<text>
的第一个单词
SRC:= 123.c 789.c 456.s eee.j
DES:=$(firstword $(SRC))
all:
@echo $(SRC)
@echo $(DES)
123.c 789.c 456.s eee.j
123.c
dir取目录函数
$(dir <names…>)
,从每个name中取出目录部分,返回文件所在目录,如果没有/,则返回./
SRC:=/mnt/hgfs/share/123
DES:=$(dir $(SRC))
all:
@echo $(SRC)
@echo $(DES)
/mnt/hgfs/share/123
/mnt/hgfs/share/
notdir取文件函数
$(notdir <names…>)
,从每个name中取出文件部分,返回文件名,如果没有文件,返回空。这里的name必须是变量名,不能是变量的内容,否则什么都不会返回
SRC:=/mnt/hgfs/share/123
DES:=$(notdir $(SRC))
all:
@echo $(SRC)
@echo $(DES)
/mnt/hgfs/share/123
123
suffix取后缀函数
$(suffix <names…>)
,从文件名序列中取出各个文件的后缀,返回后缀,如果没有后缀,返回空
SRC:= 123.c 789.c 456.s eee.j
DES:=$(suffix $(SRC))
all:
@echo $(SRC)
@echo $(DES)
123.c 789.c 456.s eee.j
.c .c .s .j
basename取前缀函数
$(basename <names…>)
,从文件名序列中取出各个文件的前缀,返回前缀,如果没有前缀,返回空
SRC:= 123.c 789.c 456.s eee.j
DES:=$(basename $(SRC))
all:
@echo $(SRC)
@echo $(DES)
123.c 789.c 456.s eee.j
123 789 456 eee
addsuffix
$(addsuffix <suffix>, <names…>)
加后缀函数
,将后缀<suffix>
加到<names>
中每个单词的后面,返回加过后缀的文件名序列
SRC:= 123.c 789.c 456.s eee.j
DES:=$(addsuffix _suf,$(SRC))
all:
@echo $(SRC)
@echo $(DES)
123.c 789.c 456.s eee.j
123.c_suf 789.c_suf 456.s_suf eee.j_suf
addprefix
$(addprefix <prefix>, <names…>)
加前缀函数
,将前缀<suffix>
加到<names>
中每个单词的后面,返回加过前缀的文件名序列
SRC:= 123.c 789.c 456.s eee.j
DES:=$(addprefix prf_,$(SRC))
all:
@echo $(SRC)
@echo $(DES)
123.c 789.c 456.s eee.j
prf_123.c prf_789.c prf_456.s prf_eee.j
join
$(join <list1> , <list2>)
连接函数
,把<list2>
中的单词对应的加到<list1>
的单词的后面,如果<list1>
中的单词更多,则多出来的单词保持原样,如果<list2>
的单词个数更多,那么多出来的被复制到<list2>
中
SRC:= 123.c 789.c 456.s eee.j
SRCJOIN:= q e r t y u
DES:=$(join $(SRC),$(SRCJOIN))
all:
@echo $(SRC)
@echo $(DES)
123.c 789.c 456.s eee.j
123.cq 789.ce 456.sr eee.jt y u
foreach
$(foreach <var>, <list>, <text>)
把<list>
中的单词逐一取出放到参数<var>
所制定的变量中,然后再执行<text>
所包含的表达式,循环过程中,<text>
所返回的每个字符串会以空格分隔,最后当整个循环结束时,<text>
所返回的每个字符串所组成的整个字符串(以空格分隔)将会是foreach函数的返回值
if
$(if <condition>, <then-part>)
$(if <condition>, <then-part>,<else-part>)
<condition>
返回非0即为真
call创建函数的函数
$(call <expression>, <param1>, <param2>, <param3>…)
origin确定变量的出身
$(origin <variable>)
,返回值有 “undefined”, “default”, “environment”, “file”, “command line”, “override” , “automatic”
shell
$(shell <shell-command>)
或$(<shell-command>)
参数是一个shell命令
error
$(error <text…>)
错误生成函数,<text…>
是错误信息
Makefile内嵌函数的更多相关文章
- Makefile所有内嵌函数
一.文本处理函数以下是GNU make内嵌的文本(字符串)处理函数.1 $(subst FROM,TO,TEXT) 函数名称:字符串替换函数—subst. 函数功能:把字串“TEXT”中的 ...
- Makefile学习(二)条件判断和内嵌函数
第七章:Makefile的条件执行 条件语句可是是两个不同的变量.或者变量和常量值的比较: 7.1例子: 对变量“CC”进行判断,其值如果是“gcc ”那么在程序连接时使用库“libgnu.so”或者 ...
- 从头開始写项目Makefile(十):make内嵌函数及make命令显示
[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 这一节我们讲一下make的函数,在之前的章节已经讲到了几 ...
- 从头开始写项目Makefile(十):make内嵌函数及make命令显示【转】
转自:http://blog.csdn.net/shallnet/article/details/38314473#comments 版权声明:本文为博主原创文章,未经博主允许不得转载.如果您觉得文章 ...
- Makefile---make内嵌函数及make命令显示 (九)
原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 这一节我们讲一下make的函数,在之前的章节已经讲到了几个函数:wildcard.patsubs ...
- 3.MVC框架开发(Razor内嵌函数)
1.建立没有返回值的Razor内嵌函数(但是能直接输出内容) 必须以@符号开头,没有返回值但能直接输出内容,比如: @helper showTitle(string strTitle){ ){ @(s ...
- 函数:内嵌函数和闭包 - 零基础入门学习Python020
函数:内嵌函数和闭包 让编程改变世界 Change the world by program 内嵌函数和闭包 接下来这两节课我们谈的话题可能会"比较高级",所以如果是零基础的朋友, ...
- Python3基础 内嵌函数 简单示例
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- cpp 内嵌函数(lambda,struct)
auto testFun = [this](int t)->void{ } []()->反回值{ } []内传入函数运行环境所用变量 ()内传入变量 捕捉块 lambda表达式的方括号部分 ...
随机推荐
- InfluxDB学习系列教程,InfluxDB入门必备教程
nfluxDB是一个当下比较流行的时序数据库,InfluxDB使用 Go 语言编写,无需外部依赖,安装配置非常方便,适合构建大型分布式系统的监控系统. 本文是一系列InfluxDB学习教程的目录,现主 ...
- ubuntu 下安装memcache 以及php扩展
1,下载软件 下载 memcached http://memcached.org/downloads 下载libevent http://libevent.org/ 2,安装 ...
- Selenium学习笔记之外部化相关测试数据---xml
我们也可以用xml来定义一个信息更为丰富的UIMap.xml文件,比如,额外还添加控件所属的页,控件的类型,然后解析构建一个XMLParser类来读取相应的值. <?xml version=&q ...
- 转【实战体验几种MySQLCluster方案】
实战体验几种MySQLCluster方案 1.背景 MySQL的cluster方案有很多官方和第三方的选择,选择多就是一种烦恼,因此,我们考虑MySQL数据库满足下三点需求,考察市面上可行的解决方案: ...
- 简单可用好实现的 HA 高可用设计
本文为作者原创,如需转载请注明出处. 1. 实现的功能 一主多备,自动选主 启动记录可查询 2. 前置需求 一台数据库用以记录,如 MySQL.Redis.MongoDB 等.关键是设计中的思想,用啥 ...
- Number()、parseInt() 和 parseFloat() 的区别
一:Number() 如果是Boolean值,true和false值将分别被转换为1和0. 如果是数字值,只是简单的传入和返回. 如果是null值,返回0. 如果是undefined,返回NaN. 如 ...
- 安装运行mariadb时错误:gtid_slave_pos
精简windows zip包后出现错误: Failed to load slave replication state from table mysql.gtid_slave_pos: 1932: T ...
- window7安装git详解
1.Git详细介绍 一.Git的诞生 Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢? 事实是 ...
- Android中View的绘制过程 onMeasure方法简述 附有自定义View例子
Android中View的绘制过程 onMeasure方法简述 附有自定义View例子 Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android fr ...
- App 即时通讯 SDK
1.网易云信 http://netease.im/ 2.环信 http://www.easemob.com/customer/im 3.融云 http://www.rongcloud.cn/ 4.极光 ...