makefile的函数集合
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的函数集合的更多相关文章
- Mysql函数集合
Mysql提供了很多函数 提供的常用函数集合 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整 ...
- 跟我一起写Makefile:使用函数
跟我一起写Makefile:使用函数 两个排版不一样 书籍下载 书籍下载
- php 常用函数集合(持续更新中...)
php 常用函数集合 在php的开发中,巧妙的运用php自带的一些函数,会起到事半功倍的效果,在此,主要记录一些常用的函数 1.time(),microtime()函数 time():获取当前时间戳 ...
- makefile(3)函数
前言 学习make和makefile的主要目的是分析大型项目的源代码的关系,上一节我们讲述了makefile 中的变量,本节主要学习一下 makefile 中的函数,首先函数肯定可以分为几部分: 内置 ...
- Makefile常用函数(转)
一.字符串处理函数 1.$(subst FROM,TO,TEXT) 函数名称:字符串替换函数-subst. 函数功能:把字串"TEXT"中的"FROM"字符替换 ...
- XSLT函数集合:数值函数、字符串函、节点集函数和布尔函数
任何的编程语言或者是SQL语句都有内置的函数或方法,而强大灵活的xslt技术也是如此.熟练掌握XSLT的常用函数的用法,XSLT的应用将变得如此轻松,你会发现XSLT比想象中还要牛!以下是xslt数值 ...
- makefile常用函数
标签(空格分隔): makefile 1.字符串替换和分析函数 $(subst from,to,text) #在文本"text"中使用"to"替换每一处&quo ...
- 调试makefile—subst函数
操作系统:ubuntu10.04 Makefile里的subst用法是$(subst FROM,TO,TEXT),即将TEXT中的东西从FROM变为TO Makefile中的字符串处理函数格式: ...
- 标准IO:常用函数集合
stdio : 标准IO (1) 流(stream)和文件(file) 流和文件 在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设备之间提供了一层抽象的东西, 称之为 ...
随机推荐
- Java例题_20 前20项之和!
1 /*20 [程序 20 求前 20 项之和] 2 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前 20 项之和. 3 程序分析:请抓住分子与分母的变 ...
- 亲测有效,解决80端口被svchost.exe进程占用的问题,网上的方法不行,可以试试这个
先说网上无效的方法(个人尝试无效,不具有代表性): 网上第一个说法:把IIS给关了,Windows10系统本身IIS是处于禁用状态的,并且没有额外安装IIS和启动IIS. 网上第二个说法:和SQL S ...
- Activiti工作流学习笔记(四)——工作流引擎中责任链模式的建立与应用原理
原创/朱季谦 本文需要一定责任链模式的基础,主要分成三部分讲解: 一.简单理解责任链模式概念 二.Activiti工作流里责任链模式的建立 三.Activiti工作流里责任链模式的应用 一.简单理解责 ...
- 解决删除Azure Active Directory的Enterprise Applications异常
当我们不需要使用某个Azure Active Directory(以下简称AAD)的时候,我们可以删除它,这个时候Azure会对当前的AAD包含的内容进行检查, 在所有的检查项目中有一个名叫" ...
- 配置IIS虚拟站点(5)
开发完ASP.NET网站后,想要直接浏览,不通过开发环境,那么就需要配置IIS虚拟站点 1.开始菜单->控制面板->所有控制面板->管理工具->双击打开Internet信息服务 ...
- vuejs集成echarts的一些问题
最近在做Beetlex的数据分析平台,在开发这个产品过程中涉及到大量的数据图表展示功能:由于产品前端使用的是vuejs开发,所以在集成echarts或多或少会碰到一些问题,在这里主要讲解一下碰到的问题 ...
- java面试一日一题:如何优化sql
问题:请讲下在mysql下如何优化sql 分析:该问题主要考察对mysql的优化,重点考虑对索引优化的掌握. 回答要点: 主要从以下几点去考虑, 1.什么样的sql需要优化? 2.怎么对sql进行优化 ...
- c++ 实现向量去重操作
去重的时候要考虑线性表或链表是否是有序 1.1.无序线性表 对于向量[1,5,3,7,2,4,7,3], 从头开始扫描vector内的元素, 对于表中r处的元素a[r], 检查数组0至r-1区间内是否 ...
- 9. resultMap 结果映射集
@Data public class CreditCard extends BankCard { /** * 消费额度 */ private String creditLine; } @Data pu ...
- Day01_06_Java注释
Java注释 注释 - 单行注释:// xxxxx - 多行注释:/* xxxxx */ - javadoc注释: /** * * * */ - javadoc注释可以被bin目录下的javadoc. ...