strip函数:$(strip text)

函数功能:去除字符串空格函数

示例:

STR =        a    b c      
LOSTR = $(strip $(STR)) 
#结果是“a b c”。

-------------------------------------------------------------------------------------------------------------------------------------------

eval函数: $(eval text)
函数功能: 它的意思是 text 的内容将作为makefile的一部分而被make解析和执行。

示例:

比如这样一个makefile:
$(eval xd:xd.c a.c)
将会产生一个这样的编译
cc xd.c a.c -o xd 这样一个makefile:
define MA
aa:aa.c
gcc -g -o aa aa.c
endef
$(eval $(call MA) )
会产生一个这样的编译:
gcc -g -o aa aa.c

-------------------------------------------------------------------------------------------------------------------------------------------

filter函数: $(filter PATTERN…,TEXT)

函数功能:过滤掉字串“TEXT”中所有不符合模式“PATTERN”的单词

示例: 

sources := foo.c bar.c baz.s ugh.h
foo: $(sources)
cc $(filter %.c %.s,$(sources)) -o foo
函数返回
值为“foo.c bar.c baz.s

-------------------------------------------------------------------------------------------------------------------------------------------

if函数: $(if <condition>,<then-part>,<else-part> )
函数功能:类似c语言的三目运算a>b?true:false;此函数如果condition非空返回then-part,condition为空返回else-part

示例:

SRC_DIR := src

#if函数---设置默认值
#如果变量SRC_DIR的值不为空,则将SRC_DIR指定的目录作为SUBDIR子目录;否则将/home/src作为子目录
SUBDIR += $(if $(SRC_DIR) $(SRC_DIR),/home/src) all:
@echo $(SUBDIR)

-------------------------------------------------------------------------------------------------------------------------------------------

patsubst函数:$(patsubst <pattern>,<replacement>,<text>)

函数功能:查找text中的单词,如果匹配pattern,那么就用replacement的内容替换

示例:

$(patsubst %.c,%.o,jello1.c jello2.c)

#那么将会替换成jello1.o jello2.o

-------------------------------------------------------------------------------------------------------------------------------------------

filter-out函数:$(filter-out PATTERN…,TEXT)

函数功能:反过滤函数—filter-out,过滤满足PATTERN的字符串

示例:

objects=main1.o foo.o main2.o bar.o
mains=main1.o main2.o $(filter-out $(mains),$(objects))
#结果:它的返回值为“foo.o bar.o”

-------------------------------------------------------------------------------------------------------------------------------------------

call函数: $(call <expression>;,<parm1>;,<parm2>;,<parm3>;...)

函数功能:call函数是唯一一个可以用来创建新的参数化的函数。你可以写一个非常复杂的表达式,这个表达式中,你可以定义许多参数,然后你可以用call函数来向这个表达式传递参数。

示例:

reverse =  $(1) $(2)

foo = $(call reverse,a,b)

那么,foo的值就是“a b”。当然,参数的次序是可以自定义的,不一定是顺序的,如:

reverse =  $(2) $(1)

-------------------------------------------------------------------------------------------------------------------------------------------

foreach函数:$(foreach <var>,<list>,<cmd>)

函数功能:用var便利list,并且cmd执行操作

示例:

names := a b c d

files := $(foreach n,$(names),$(n).o)

#结果:$(files)的值是“a.o b.o c.o d.o”。

-------------------------------------------------------------------------------------------------------------------------------------------

wildcard函数 $(wildcard PATTERN...) 

函数功能:显示指定路径下指定文件类型PATTERN的所有文件(以相对路径显示)

示例:

src=$(wildcard *.c ./sub/*.c)
all:
 @echo $(src)
#输出:
# a.c b.c ./sub/sa.c ./sub/sb.c

-------------------------------------------------------------------------------------------------------------------------------------------

notdir函数 $(notdir PATTERN...) 

函数功能:显示文件列表的全部文件名

示例:

src=$(wildcard *.c ./sub/*.c)
dir=$(notdir $(src))

all:
 @echo $(src)
 @echo $(dir)

执行结果分析:
第一行输出:
 a.c b.c ./sub/sa.c ./sub/sb.c
 wildcard把 指定目录 ./ 和 ./sub/ 下的所有后缀是c的文件全部展开。

  第二行输出:
  a.c b.c sa.c sb.c
  notdir把展开的文件去除掉路径信息

-------------------------------------------------------------------------------------------------------------------------------------------

addprefix函数: $(addprefix <prefix>, <name1 name2 ...>)

函数功能:把<prefix>加到name序列中的每一个元素前面,添加前缀

示例:

result = $(addprefix %., c cpp)
test:
@echo $(result) #输出:%.c %.cpp

-------------------------------------------------------------------------------------------------------------------------------------------

addsuffix函数: $(addsuffix <prefix>, <name1 name2 ...>)

函数功能:把<prefix>加到name序列中的每一个元素后面,添加后缀

示例:

result = $(addsuffix .%, c cpp)
test:
@echo $(result) #输出:c.% cpp.%

-------------------------------------------------------------------------------------------------------------------------------------------

foreach函数:  $(foreach var text commond)

函数功能:循环处理文件列表。

示例:

src := 1.c 2.c. 3.c 4.c

all:
@echo $(foreach n,$(src), \
$(n) \
$(n) \
)
#输出结果:1.c 1.c 2.c. 2.c. 3.c 3.c 4.c 4.c
 
 
 

makefile的函数集合的更多相关文章

  1. Mysql函数集合

    Mysql提供了很多函数 提供的常用函数集合 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整 ...

  2. 跟我一起写Makefile:使用函数

    跟我一起写Makefile:使用函数 两个排版不一样 书籍下载 书籍下载

  3. php 常用函数集合(持续更新中...)

    php 常用函数集合 在php的开发中,巧妙的运用php自带的一些函数,会起到事半功倍的效果,在此,主要记录一些常用的函数 1.time(),microtime()函数 time():获取当前时间戳 ...

  4. makefile(3)函数

    前言 学习make和makefile的主要目的是分析大型项目的源代码的关系,上一节我们讲述了makefile 中的变量,本节主要学习一下 makefile 中的函数,首先函数肯定可以分为几部分: 内置 ...

  5. Makefile常用函数(转)

    一.字符串处理函数 1.$(subst FROM,TO,TEXT) 函数名称:字符串替换函数-subst. 函数功能:把字串"TEXT"中的"FROM"字符替换 ...

  6. XSLT函数集合:数值函数、字符串函、节点集函数和布尔函数

    任何的编程语言或者是SQL语句都有内置的函数或方法,而强大灵活的xslt技术也是如此.熟练掌握XSLT的常用函数的用法,XSLT的应用将变得如此轻松,你会发现XSLT比想象中还要牛!以下是xslt数值 ...

  7. makefile常用函数

    标签(空格分隔): makefile 1.字符串替换和分析函数 $(subst from,to,text) #在文本"text"中使用"to"替换每一处&quo ...

  8. 调试makefile—subst函数

    操作系统:ubuntu10.04 Makefile里的subst用法是$(subst FROM,TO,TEXT),即将TEXT中的东西从FROM变为TO Makefile中的字符串处理函数格式:    ...

  9. 标准IO:常用函数集合

    stdio : 标准IO  (1) 流(stream)和文件(file) 流和文件 在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设备之间提供了一层抽象的东西, 称之为 ...

随机推荐

  1. Redis入门到放弃系列-redis数据类型

    Redis数据类型? Redis 提供一些常用的数据类型:Strings.Lists.Sets.Sorted sets.Hashes.Arrays.Bitmap.Streams Strings(字符串 ...

  2. 【故障公告】阿里云 RDS SQL Server 数据库实例 CPU 100% 引发全站故障

    非常抱歉,今天 8:48 开始,我们使用的阿里云 RDS SQL Server 数据库实例突然出现 CPU 100%  问题,引发全站故障,由此给您带来麻烦,请您谅解. 发现故障后立即进行主备切换,和 ...

  3. 通俗地理解面向服务的架构(SOA)以及微服务之间的关系

    SOA是一种软件的应用架构方法,它基于面向对象,但又不是面向对象,整体上是面向服务的架构.SOA由精确的服务定义.松散的构件服务组成,以及业务流程调用等多个方面形成的一整套架构方法. 这话是不是听起来 ...

  4. PReact10.5.13源码理解

    React源码看过几次,每次都没有坚持下来,索性学习一下PReact部分,网上讲解源码的不少,但是基本已经过时,所以自己来梳理下 render.js部分 import { EMPTY_OBJ, EMP ...

  5. Java中的面向切面编程(AOP)

    一.什么是AOP? Aspect Oriented Programming ,即面向切面编程. AOP是对面向对象编程的一个补充. 它的目的是将复杂的需求分解为不同的切面,将散布在系统中的公共功能集中 ...

  6. BUAA_OS lab4 难点梳理

    BUAA_OS lab4 难点梳理 lab4体会到了OS难度的飞升.实验需要掌握的重点有以下: 系统调用流程 进程通信机制 fork 本lab理解难度较高,接下来将以以上三部分分别梳理. 系统调用 概 ...

  7. 创建支持依赖注入、Serilog 日志和 AppSettings 的 .NET 5 控制台应用

    翻译自 Mohamad Lawand 2021年3月24日的文章 <.NET 5 Console App with Dependency Injection, Serilog Logging, ...

  8. 用Taro写一个微信小程序(一)——开始一个项目

    一.Taro简介 1.名字由来 Taro['tɑ:roʊ],泰罗·奥特曼,宇宙警备队总教官,实力最强的奥特曼. 2.taro是什么 Taro 是一个开放式跨端跨框架解决方案,支持使用 React/Vu ...

  9. 2020北航OO第一单元总结

    前言 学习面向对象这门课程的后的第一单元作业,主线是多项式求导,三次作业层层推进,由单一的幂函数求导,到幂函数和三角函数的复合求导,最后再到两种函数的嵌套求导,由两个类到重构后的十几个类,我逐渐对面向 ...

  10. red and black(BFS)

    Red and Black Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 40685   Accepted: 22079 D ...