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键 ...
随机推荐
- cmake编译排除文件夹
在CMakeLists.txt中,要对某些子文件夹全部进行编译则使用 add_subdirectory(examples) 那如果在examples文件夹中建立了某个目录如examples/venv, ...
- 在java开发环境中,快捷键的使用及用法
(1)Ctrl+M切换窗口的大小 (2)Ctrl+Q跳到最后一次的编辑处 (3)F2当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show Tooltip De ...
- python基础知识(函数)
创建函数 def 函数名(可以选参数): 可选参数 ''' ''' 用三引号括起来的注释 说明功能和参数信息 可选参数指定函数体 执行函数程序代码 创建一个空函数 def empty(): p ...
- Python3 Selenium自动化web测试 ==> 第九节 WebDriver高级应用 -- 操作select 和 alert
学习目的: 掌握页面常规元素的定位方法 场景: 网页正常的select元素下拉框常规方法和select专属方法 正式步骤: step1:常规思路select页面元素定位 处理HTML代码截图 # -* ...
- Java学习笔记-Java中的常用类
Java中有很多类是很常用的,此处列举System,Runtime,Date,Calendar,Math System System:类中的方法和属性都是静态的 字段摘要 static PrintSt ...
- JavaScript 3种内置对象
前面我们学了对象,如何创建对象及使用对象. 内置对象不需要实例化,就可以使用. 可以通俗地理解,在内存里的东东是对象,也就是实例化好的.在磁盘里的东东是类,需要实例化才能使用.实例化后的东东在内存里. ...
- springboot整合es客户端操作elasticsearch(五)
springboot整合es客户端操作elasticsearch的总结: 客户端可以进行可以对所有文档进行查询,就是不加任何条件: SearchRequest searchRequest = new ...
- struts框架之环境搭建(一)
一.首先,我们需要做一些准备工作: 1.1. 下载struts:https://struts.apache.org/download.cgi#struts2520 1.2. 下载tomcat:ht ...
- [bzoj3357][Usaco2004]等差数列_动态规划_贪心
[Usaco2004]等差数列 题目大意:约翰发现奶牛经常排成等差数列的号码.他看到五头牛排成这样的序号:“1,4,3,5,7”很容易看出“1,3,5,7”是等差数列.给出N(1≤N≤2000)数字A ...
- [转帖]LINUX网络配置---nmtui&nmcli
LINUX网络配置---nmtui&nmcli https://blog.51cto.com/13625527/2151853?source=dra 两年前曾经打打印过 几页命令 里面就有 n ...