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内嵌函数的更多相关文章

  1. Makefile所有内嵌函数

    一.文本处理函数以下是GNU make内嵌的文本(字符串)处理函数.1       $(subst FROM,TO,TEXT) 函数名称:字符串替换函数—subst. 函数功能:把字串“TEXT”中的 ...

  2. Makefile学习(二)条件判断和内嵌函数

    第七章:Makefile的条件执行 条件语句可是是两个不同的变量.或者变量和常量值的比较: 7.1例子: 对变量“CC”进行判断,其值如果是“gcc ”那么在程序连接时使用库“libgnu.so”或者 ...

  3. 从头開始写项目Makefile(十):make内嵌函数及make命令显示

    [版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com]     这一节我们讲一下make的函数,在之前的章节已经讲到了几 ...

  4. 从头开始写项目Makefile(十):make内嵌函数及make命令显示【转】

    转自:http://blog.csdn.net/shallnet/article/details/38314473#comments 版权声明:本文为博主原创文章,未经博主允许不得转载.如果您觉得文章 ...

  5. Makefile---make内嵌函数及make命令显示 (九)

    原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 这一节我们讲一下make的函数,在之前的章节已经讲到了几个函数:wildcard.patsubs ...

  6. 3.MVC框架开发(Razor内嵌函数)

    1.建立没有返回值的Razor内嵌函数(但是能直接输出内容) 必须以@符号开头,没有返回值但能直接输出内容,比如: @helper showTitle(string strTitle){ ){ @(s ...

  7. 函数:内嵌函数和闭包 - 零基础入门学习Python020

    函数:内嵌函数和闭包 让编程改变世界 Change the world by program 内嵌函数和闭包 接下来这两节课我们谈的话题可能会"比较高级",所以如果是零基础的朋友, ...

  8. Python3基础 内嵌函数 简单示例

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  9. cpp 内嵌函数(lambda,struct)

    auto testFun = [this](int t)->void{ } []()->反回值{ } []内传入函数运行环境所用变量 ()内传入变量 捕捉块 lambda表达式的方括号部分 ...

随机推荐

  1. 转:python signal信号

    转自:http://www.jb51.net/article/74844.htm 在liunx系统中要想每隔一分钟执行一个命令,最普遍的方法就是crontab了,如果不想使用crontab,经同事指点 ...

  2. 《高可用MySQL》1 – Windows环境下压缩版MySQL安装

    近日在读O’REILIY系列的<高可用MySQL>, 自然少不了主从(Master-Slave)配置和横向扩展相关的内容.Master-Slave这东西吧,在许多公司都是标配,开发中基本天 ...

  3. mybatis 3的TypeHandler解析(null值的处理)

    最近,在测试迁移公司的交易客户端连接到自主研发的中间件时,调用DAO层时,发现有些参数并没有传递,而在mapper里面是通过parameterMap传递的,因为有些参数为null,这就导致了参数传递到 ...

  4. Android应用开发基础之十一:新特性

    Fragment 用途:在一个Activity里切换界面,切换界面时只切换Fragment里面的内容 生命周期方法跟Activity一致,可以理解把其为就是一个Activity 定义布局文件作为Fra ...

  5. Intro.js 网站演示

    Intro.js 为您的网站和项目提供一步一步的.更好的介绍 使用简单 引入 js 和 css,然后在代码中加入步骤和介绍. 快速小巧 7 KB 的 JavaScript 和 3 KB CSS,就是全 ...

  6. 如何在Visual Studio中开发自己的代码生成器插件

     Visual Studio是美国微软公司开发的一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具.代码管控工具.集成开发环境(IDE)等等,且所写的目标代码适用于微 ...

  7. Strip JS – 低侵入,响应式的 Lightbox 效果

    Strip  是一个灯箱效果插件,显示的时候只会覆盖部分的页面,这使得侵扰程度较低,并留出了空间与页面上的大屏幕,同时给予小型移动设备上的经典灯箱体验.Strp JS 基于 jQuery 库实现,支持 ...

  8. Winjs – 微软开源技术发布的 JavaScript 组件集

    Winjs 是由微软开源技术的开发者推出的一组 JavaScript 组件,包括 ListView.ListView.Tooltip.DatePicker.Ratings 等等,帮助 Web 开发人员 ...

  9. 如何使用递归遍历对象获得value值

    一般要用到递归,就要判断对象是否和父类型是否一样 这里演示简单的对象递归,还有数组递归类似. var obj = { a:{w:1,y:2,x:3}, b:{s:4,j:5,x:6}, c:{car: ...

  10. SharePoint基于windows验证的如何通过组策略实现IE自动以当前域账号登录SP站点

    通过组策略实现IE自动以当前域账号登录SP站点 1. 在运行中运行MMC,启动"组策略对象编辑器". 如下图: 找到组策略如下图: 找到域 点右键编辑 找到如下图: 找到[计算机配 ...