makefile学习之函数
GNU make支持内置函数以及用户自定义函数,下面结合例子简单介绍一下。
gnu make版本: 4.1
一、用户自定义函数
格式: $(call macro-name{, param1 ···})
解析: macro-name可以是任意宏或变量,macro-name之后是宏的参数,并以逗号为分隔符。
例子:
define test-call
echo "call has two parameters: $1, $2"
endef .PTHONY: simple-test
simple-test:
@$(call test-call,one,two)
运行结果:
make simple-test
call has two parameters: one, two
二、内置函数
字符串函数
1、filter
格式: $(filter pattern ···text)
解析: filter函数会将text视为一系列被空格隔开的单词,与pattern比较之后接着会返回相符者。
例子:
words := GNU is not unix and linux is not unix .PTHONY: simple-test
simple-test:
@echo words: $(words)
@echo unix matches: $(filter unix, $(words))
运行结果:
make simple-test
words: GNU is not unix and linux is not unix
unix matches: unix unix
2、filter-out
格式: $(filter-out patern...,text)
解析:这个函数功能与filter刚好相反
例子:
words := GNU is not unix and linux is not unix .PTHONY: simple-test
simple-test:
@echo words: $(words)
@echo unix matches: $(filter-out unix, $(words))
运行结果:
make simple-test
words: GNU is not unix and linux is not unix
unix matches: GNU is not and linux is not
3、findstring
格式: $(findstring string...,text)
解析: 此函数将会在text里面搜索string。如果该字符被找到了,此函数就会返回string,否则,它会返回空值。
例子:
words := GNU is not unix and linux is not unix .PTHONY: simple-test
simple-test:
@echo words: $(words)
@echo unix matches: $(findstring unix, $(words))
运行结果:
make simple-test
words: GNU is not unix and linux is not unix
unix matches: unix
4、subst
格式: $(subst search-string,replace-string, text)
解析:这是一个不具通配符能力的”搜索和替换“函数。它最常被用来在文件名列表将一个扩展名替换成另一个扩展名
例子:
sourcelist := GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c .PTHONY: simple-test
simple-test:
@echo sourcelist: $(sourcelist)
@echo unix matches: $(subst .c,.o,$(sourcelist))
运行结果:
make simple-test
sourcelist: GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c
unix matches: GNU.o is.o not.o unix.o and.o linux.o is.o not.o unix.o
这可以将在soucelist里面所有出现.c字样的地方都替换成.o。
5、pathsubst
格式: $(pathsubst search-pattern,replace-pattern,text)
解析: 这是一个具有通配符能力的”搜索和替换“函数。
例子:
sourcelist := GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c .PTHONY: simple-test
simple-test:
@echo sourcelist: $(sourcelist)
@echo unix matches: $(patsubst %nix.c, UNIX,$(sourcelist))
运行结果:
make simple-test
sourcelist: GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c
unix matches: GNU.c is.c not.c UNIX and.c linux.c is.c not.c UNIX
6、words
格式: $(words text)
解析:此函数会返回text中单词的数量
例子:
sourcelist := GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c .PTHONY: simple-test
simple-test:
@echo sourcelist: $(sourcelist)
@echo unix matches: $(words $(sourcelist))
运行结果:
make simple-test
sourcelist: GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c
unix matches: 9
7、words后面带n
格式:$(words n,text)
解析: 此函数会返回text中的第n个单词,第一个单词的编号为1。如果n的值大于text中单词的个数,则此函数将会返回空值。
例子:
sourcelist := GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c .PTHONY: simple-test
simple-test:
@echo sourcelist: $(sourcelist)
@echo unix matches: $(words ,$(sourcelist))
测试结果:
make simple-test
sourcelist: GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c
unix matches: 9
没有返回预想的值,好奇怪。
8、firstword
格式: $(firstword text)
解析: 此函数会返回text中的第一个单词。
例子:
sourcelist := GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c .PTHONY: simple-test
simple-test:
@echo sourcelist: $(sourcelist)
@echo unix matches: $(firstword $(sourcelist))
运行结果:
make simple-test
sourcelist: GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c
unix matches: GNU.c
9、wordlist
格式: $(wordlist start,end,text)
解析: 此函数会返回text中范围从start(含)到end(含)的单词。
例子:
sourcelist := GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c .PTHONY: simple-test
simple-test:
@echo sourcelist: $(sourcelist)
@echo unix matches: $(wordlist ,,$(sourcelist))
运行结果:
make simple-test
sourcelist: GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c
unix matches: GNU.c is.c not.c
时间关系,先介绍到这。
makefile学习之函数的更多相关文章
- [转]Windows平台下Makefile学习笔记
Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...
- makefile学习(1)
GNU Make / Makefile 学习资料 GNU Make学习总结(一) GNU Make学习总结(二) 这篇学习总结,从一个简单的小例子开始,逐步加深,来讲解Makefile的用法. 最后用 ...
- JavaScript学习09 函数本质及Function对象深入探索
JavaScript学习09 函数本质及Function对象深入探索 在JavaScript中,函数function就是对象. JS中没有方法重载 在JavaScript中,没有方法(函数)重载的概念 ...
- makefile学习小结
=============2016/08/15================ 上午完成makefile的试验,缩短了代码量,现在make强大,有缺省的变量,能自己推导关系,不需要gcc –MM -M ...
- Linux makefile教程之函数七[转]
使用函数 ———— 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做 ...
- C++学习之函数指针
C++学习之函数指针 和数据项类似,函数也有地址,函数的地址是存储在机器语言代码的内存的开始地址.通常,这些地址对用户而言,不重要也没什么用处,但对程序而言,它却很有用. 一.函数 ...
- Javascript学习5 - 函数
原文:Javascript学习5 - 函数 在Javascript中,函数和对象是交织在一起的.有些函数的特性与对象相关联.这一点的内容在第六部分会讨论到. 这一部分主要讨论函数与其它比较熟悉的语言( ...
- linux makefile字符串操作函数 替换subst、模式替换patsubst、去首尾空格strip、查找字符串findstring、过滤filter、反过滤filter-out、排序函数sort、取单词word、取单词串wordlist、个数统计words
1.1 字符操作函数使用 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函 ...
- [arm学习]makefile学习总结
makefile不仅仅是一个命令的集合体,其中有一些规则是需要理解掌握的. 首先,了解makefile的规则: //-----------格式---------- 目标 : 依赖1,依赖2 (TAP键 ...
随机推荐
- R语言常用包简介
- Java中传入一个时间范围,取出该时间范围内所有日期的集合
直接上代码: import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; impor ...
- sysctl 命令
sysctl命令 被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中.它包含一些TCP/ip堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性 ...
- weblogic12.1.3部署应用程序
weblogic12.1.3部署应用程序请参照:https://www.cnblogs.com/xdp-gacl/p/4143413.html
- HashPump用法
做哈希长度扩展攻击的时候用到这个工具,但是没找到这个工具详解办法 我这篇不算是详解,只是收集例子做出的一个用法 HashPump一种在各种散列算法中利用散列长度扩展攻击的工具.目前支持的算法:MD5, ...
- UE4 RHI(2)
在上篇简单说明RHI的作用后, 我们在引擎中探索一下RHI的种种细节与实现. 在解决方案资源管理器中搜索RHI, 会有这些文件: (1)对应不同运行平台的PlatformDynamicRHI.cpp( ...
- 鸟哥私房菜基础篇:Linux 账号管理与 ACL 权限配置习题
猫宁!!! 参考:http://cn.linux.vbird.org/linux_basic/0410accountmanager.php 1-root 的 UID 与 GID 是多少?而基于这个理由 ...
- 【CodeForces - 939A】Love Triangle(模拟)
Love Triangle Descriptions: 正如你所知道的,没有男性飞机也没有女性飞机.然而,地球上的每一个平面都喜欢另一个平面.地球上有n个平面,编号从1到n,编号i的平面喜欢编号fi的 ...
- Linux操作系统原理笔记
在Linux操作系统内核内部,进程是通过一个链表,而且是一个双向链表来管理的. 进程描述符:每一个进程都有其描述符,每一个描述符彼此之间都有关联性的. 双向链表: 一个进程内部可能包含多个线程 ...
- [Agc036C]Triangle_数学
Triangle 题目链接:https://atcoder.jp/contests/agc036/tasks/agc036_a 题解: 我开始的时候以为是$Millar-Rabin$加$Pollard ...