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学习之函数的更多相关文章

  1. [转]Windows平台下Makefile学习笔记

    Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...

  2. makefile学习(1)

    GNU Make / Makefile 学习资料 GNU Make学习总结(一) GNU Make学习总结(二) 这篇学习总结,从一个简单的小例子开始,逐步加深,来讲解Makefile的用法. 最后用 ...

  3. JavaScript学习09 函数本质及Function对象深入探索

    JavaScript学习09 函数本质及Function对象深入探索 在JavaScript中,函数function就是对象. JS中没有方法重载 在JavaScript中,没有方法(函数)重载的概念 ...

  4. makefile学习小结

    =============2016/08/15================ 上午完成makefile的试验,缩短了代码量,现在make强大,有缺省的变量,能自己推导关系,不需要gcc –MM -M ...

  5. Linux makefile教程之函数七[转]

    使用函数 ———— 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做 ...

  6. C++学习之函数指针

     C++学习之函数指针          和数据项类似,函数也有地址,函数的地址是存储在机器语言代码的内存的开始地址.通常,这些地址对用户而言,不重要也没什么用处,但对程序而言,它却很有用. 一.函数 ...

  7. Javascript学习5 - 函数

    原文:Javascript学习5 - 函数 在Javascript中,函数和对象是交织在一起的.有些函数的特性与对象相关联.这一点的内容在第六部分会讨论到. 这一部分主要讨论函数与其它比较熟悉的语言( ...

  8. linux makefile字符串操作函数 替换subst、模式替换patsubst、去首尾空格strip、查找字符串findstring、过滤filter、反过滤filter-out、排序函数sort、取单词word、取单词串wordlist、个数统计words

    1.1       字符操作函数使用 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函 ...

  9. [arm学习]makefile学习总结

    makefile不仅仅是一个命令的集合体,其中有一些规则是需要理解掌握的. 首先,了解makefile的规则: //-----------格式---------- 目标 : 依赖1,依赖2 (TAP键 ...

随机推荐

  1. Python之Numpy:二元函数绘制/三维数据可视化/3D

    意义 在机器学习任务中选择计算模型或者学习数学时,可视化有助于研究函数值的变化趋势(观察收敛.分布.几何形状等),带来直观的感受. 源码 # 绘制二元函数 # 参考文献 # + python画二元函数 ...

  2. React Native常用的第三方开源库

    记录一下自己暂目前了解和使用的一些开源库和官方文档和优秀博客介绍,希望对你有帮助☺️: 1.Toast: https://github.com/magicismight/react-native-ro ...

  3. dtcms 手机浏览

    private string GetSitePath(string webPath, string requestPath, string requestDomain) { //获取当前域名包含的站点 ...

  4. 使用logstash迁移elasticsearch数据

    支持同集群复制和跨集群复制 优点:通过简单配置即可实现.零编码. 缺点:logstash 单点运行迁移,速度一般. 以es2.2.1  logstash2.2.1 为例 以下logstash 配置功能 ...

  5. 【VS开发】VS2010中导入ActiveX控件

    方法1: 1.首先在在项目上面右击添加类,如下图所示: 2.点击添加ActiveX控件中的MFC类 3.找到需要添加的ActiveX类. 4.点击完成即可. 5.此时转到资源视图,打开如下视图.可能工 ...

  6. 【VS开发】ATL辅助COM组件开发

    有些时候在程序的编写过程中我们会跨语言写一些东西,比如在C#中使用到C++,这个时候COM的出现就很好的解决了这一问题,我们如何来创建并且编写COM组件呢? 一.首先:创建一个ATL项目,如下图所示: ...

  7. Java学习笔记-IO

    IO(Input Output)流,用来处理设备之间的数据传输 IO IO概述 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中 流按操作数据分为两种:字节流与字符流 流按流向 ...

  8. code review规则

    简单可行的code review规则 前言 曾经有一段垃圾代码放在我的面前,我没有拒绝,等我真正开始接手的时候我才后悔莫及,程序员最痛苦的事莫过于此! 每当接手别人的代码,都有一种想重新写一遍的感觉, ...

  9. HDU 1688 Sightseeing 【输出最短路+次短路条数】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1688 题目大意:给n个点,m条有向边.再给出起点s, 终点t.求出s到t的最短路条数+次短路条数. 思 ...

  10. POJ1703Find them, Catch them 【种类并查集】

    题目链接:http://poj.org/problem?id=1703 题目大意:给n个人,m次询问.A代表询问a, b之间的关系,D代表给出a, b属于不同的帮派. 我的想法: 太菜了,上课的时候没 ...