文件名操作函数

每个函数的参数字符串都会被当做一个或是一系列的文件名来对待。

$(dir <names...>)
名称:取目录函数——dir。
功能:从文件名序列<names>中取出目录部分。目录部分是指最后一个反斜杠(“/”)之前的部分。如果没有反斜杠,那么返回“./”。
返回:返回文件名序列<names>的目录部分。
示例: $(dir src/foo.c hacks)返回值是“src/ ./”。
$(notdir <names...>)
名称:取文件函数——notdir。
功能:从文件名序列<names>中取出非目录部分。非目录部分是指最后一个反斜杠(“/”)之后的部分。
返回:返回文件名序列<names>的非目录部分。
示例: $(notdir src/foo.c hacks)返回值是“foo.c hacks”。
$(suffix <names...>)
名称:取后缀函数——suffix。
功能:从文件名序列<names>中取出各个文件名的后缀。
返回:返回文件名序列<names>的后缀序列,如果文件没有后缀,则返回空字串。
示例: $(suffix src/foo.c src-1.0/bar.c hacks)返回值是“.c .c”。
$(basename <names...>)
名称:取前缀函数——basename。
功能:从文件名序列<names>中取出各个文件名的前缀部分。
返回:返回文件名序列<names>的前缀序列,如果文件没有前缀,则返回空字串。
示例: $(basename src/foo.c src-1.0/bar.c hacks)返回值是“src/foo src-1.0/bar hacks”。
$(addsuffix <suffix>,<names...>)
名称:加后缀函数——addsuffix。
功能:把后缀<suffix>加到<names>中的每个单词后面。
返回:返回加过后缀的文件名序列。
示例: $(addsuffix .c,foo bar)返回值是“foo.c bar.c”。
$(addprefix <prefix>,<names...>)
名称:加前缀函数——addprefix。
功能:把前缀<prefix>加到<names>中的每个单词后面。
返回:返回加过前缀的文件名序列。
示例: $(addprefix src/,foo bar)返回值是“src/foo src/bar”。
$(join <list1>,<list2>)
名称:连接函数——join。
功能:把<list2>中的单词对应地加到<list1>的单词后面。如果<list1>的单词个数要比<list2>的多,那么, <list1>中的多出来的单词将保持原样。如果<list2>的单词个数要比<list1>多,那么,
<list2>多出来的单词将被复制到<list2>中。
返回:返回连接过后的字符串。
示例: $(join aaa bbb , )返回值是“aaa111 bbb222 ”。

foreach 函数 :用来做循环用的

$(foreach <var>,<list>,<text>)
把参数<list>中的单词逐一取出放到参数<var>所指定的变量中,然后再执行<text>所包含的表达式。每一次<text>会返回一个字符串,循环过程中, <text>的所返回的每个字符串会以空格分隔,最后当整个循环结束时,
<text>所返回的每个字符串所组成的整个字符串(以空格分隔)将会是 foreach 函数的返回值。 <var>最好是一个变量名, <list>可以是一个表达式,而<text>中一般会使用<var>这个参数来依次枚举<list>中的单词。
names := a b c d
files := $(foreach n,$(names),$(n).o) //$(files)的值是“a.o b.o c.o d.o
注意, foreach 中的<var>参数是一个临时的局部变量, foreach 函数执行完后,参数<var>的变量将不在作用,其作用域只在 foreach 函数当中

 if 函数 :跟ifeq很像

$(if <condition>,<then-part>)              //<condition>参数是 if 的表达式,如果其返回的为非空字符串,那么这个表达式就相当于返回真,于是, <then-part>会被计算,否则<else-part>会被计算
或是
$(if <condition>,<then-part>,<else-part>)

call 函数 :唯一一个可以用来创建新的参数化的函数

$(call <expression>,<parm1>,<parm2>,<parm3>...)
当 make 执行这个函数时, <expression>参数中的变量,如$(1), $(2), $(3)等,会被参数<parm1>, <parm2>, <parm3>依次取代。而<expression>的返回值就是 call 函数的返回值。

eg:

reverse = $() $()
foo = $(call reverse,a,b)
那么, foo 的值就是“a b”。当然,参数的次序是可以自定义的,不一定是顺序的,如:
reverse = $() $()
foo = $(call reverse,a,b)
此时的 foo 的值就是“b a”

origin 函数 :不操作变量的值,他只是告诉你你的这个变量是哪里来的 。

$(origin <variable>)
注意:<variable>是变量的名字,不应该是引用。所以你最好不要在<variable>中使用“$”字符。 Origin函数会以其返回值来告诉你这个变量的“出生情况”,origin函数的返回值:
“undefined” :如果<variable>从来没有定义过, origin 函数返回这个值“undefined”。
“default” :如果<variable>是一个默认的定义,比如“CC”这个变量
“environment” :如果<variable>是一个环境变量,并且当 Makefile 被执行时,“-e”参数没有被打开。
“file” :如果<variable>这个变量被定义在 Makefile 中。
“command line” :如果<variable>这个变量是被命令行定义的。
“override” :如果<variable>是被 override 指示符重新定义的。
“automatic” :如果<variable>是一个命令运行中的自动化变量。

跟我学Makefile(五)的更多相关文章

  1. Mina、Netty、Twisted一起学(五):整合protobuf

    protobuf是谷歌的Protocol Buffers的简称,用于结构化数据和字节码之间互相转换(序列化.反序列化),一般应用于网络传输,可支持多种编程语言. protobuf如何使用这里不再介绍, ...

  2. 从头开始学JavaScript (五)——操作符(二)

    原文:从头开始学JavaScript (五)--操作符(二) 一.乘性操作符 1.乘法:*      乘法操作符的一些特殊规则: 如果操作数都是数值,按照常规的乘法计算,如果乘积超过了ECMAscri ...

  3. 跟我学Makefile(三)

    紧接着跟我学Makefile(二)继续学习:变量高级用法 (1)变量值的替换 :替换变量中的共有的部分,其格式是“$(var:a=b)”或是“${var:a=b}”,把变量“var”中所有以“a”字串 ...

  4. 一起学Makefile(五)

    多目标规则 多目标规则,可以简单的理解为是一种将多条具有1)相同依赖和2)相同生成命令的规则,合并成一条规则的语法,其基本格式为: targets...: prerequisites... comma ...

  5. 一起学makefile

    Unix.Linux必学知识哈哈,网上看到一哥们写得挺好挺详细的,直接复制地址就分享哈哈哈. 跟我一起写 Makefile(一) 概述 跟我一起写 Makefile(二) make是如何工作的 跟我一 ...

  6. Linux就该这么学--第五期 学习笔记

    第一节:基础 <Linux就该这么学>第二期视频 Linux就该这么学第5期第二节: ------------你的价值:你对公司做出的共享和你的不可替代性------------瑞尔系统R ...

  7. 跟我一起学Makefile

    概述 什么是makefile?或许很多Winodws程序员都不知道这个东西,因为那些Windows IDE都为你做了这个工作,但我觉得要做一个好的和professional的程序员,makefile还 ...

  8. 跟我一起写Makefile(五)

    使用变量———— 在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地展开在所使用的地方.其与C/C++所不同的是, ...

  9. 跟我学Makefile(七)

    定义模式规则 使用模式规则来定义一个隐含规则.一个模式规则就好像一个一般的规则,只是在规则中,目标的定义需要有“%”字符.“%”的意思是表示一个或多个任意字符.在依赖目标中同样可以使用“%”,只是依赖 ...

随机推荐

  1. 前端架构一之XAMPP

    摘要: 随着用户体验的重要性和项目的富客户端化,越来越多的公司将前端与后端分离开来,这时候前端就需要有自己的服务环境.本文将介绍我在开发中所用到的前端服务环境的搭建. 环境: OS: win7 64b ...

  2. mybatis由浅入深day02_5resultMap总结

    5 resultMap总结 resultType: 作用: 将查询结果按照sql列名pojo属性名一致性映射到pojo中. 场合: 常见一些明细记录的展示,比如用户购买商品明细,将关联查询信息全部展示 ...

  3. POJ 3211 Washing Cloths(01背包变形)

    Q: 01背包最后返回什么 dp[v], v 是多少? A: 普通01背包需要遍历, 从大到小. 但此题因为物品的总重量必定大于背包容量, 所以直接返回 dp[V] 即可 update 2014年3月 ...

  4. swift--控件工厂类的实现

    控件工厂类,简而言之就是,减少代码的复用率,只在哪里用,然后在哪里调: 代码如下: import UIKit class ViewFactory: UIView,UITextFieldDelegate ...

  5. php-新特性,生成器的创建和使用

    mark 一下~ http://laravelacademy.org/post/4317.html

  6. Oracle的闪回操作

    Oracle10g中引入了闪回技术,但这并不意味着所有的表都能闪回成功,当没有足够的磁盘空间,Oracle将使用回收站中的磁盘空间,而且位图连接索引和引用完整性约束也不受回收站的保护. recycle ...

  7. pycharm激活地址

    http://elporfirio.com:1017 http://idea.iteblog.com/key.php

  8. JSTL中&#60;c:set&#62;标签的用法

    <c:set>标签有两种不同的属性设置:var和target. var“版本”用于设置作用域属性,target“版本”用于设置bean属性或Map值. 这两个版本都有两种形式:有标签体和没 ...

  9. {sharepoint} Setting List Item Permissions Programatically in sharepoint

    namespace Avinash { class Program { static void Main(string[] args) { SetListItemPermission(); } sta ...

  10. linux下安装F-prot杀毒软件

    一. f-prot的安装 1.首先我们要创建一个带有超级权限的用户 sudo passwa root 2.su 切换用户 3.下载F-prot http://www.f-prot.com/downlo ...