makefile中的函数

makefile中有两类函数

  • make提供了一系列的预定义函数给makefile使用
  • 用户可以使用define自定义函数,并使用预定义的call函数调用

预定义函数

make解释器的预定义函数有如下特点

  • 提供了处理变量、文件名和命令的函数
  • 函数有返回值,可以在调用的地方被替换成函数的返回结果

预定义函数的形式

var := $(func arg1, arg2, ...)

下面说明几个常用的预定义函数,其他的可以参考make的用户手册

  • $(addprefix PREFIX,NAMES…)
    函数名称:加前缀函数— addprefix。
    函数功能:为“NAMES…”中的每一个文件名添加前缀“PREFIX”。参数“NAMES…”是空格分割的文件名序列,将“SUFFIX”添加到此序列的每一个文件名之前。
    返回值:以单空格分割的添加了前缀“PREFIX”的文件名序列。
    示例:$(addprefix src/,foo bar)
    返回值为“src/foo src/bar”。

  • $(wildcard PATTERN)
    函数名称:获取匹配模式文件名函数— wildcard
    函数功能:列出当前目录下所有符合模式“PATTERN”格式的文件名。
    返回值:空格分割的、存在当前目录下的所有符合模式“PATTERN”的文件名。
    函数说明:“ PATTERN”使用shell可识别的通配符,包括“?”(单字符)、“*”(多字符)等。
    示例:$(wildcard *.c)
    返回值为当前目录下所有.c源文件列表。

  • call函数
    call函数是唯一一个可以创建定制化参数函数的引用函数。使用这个函数可以实现对用户自己定义函数引用。我们可以将一个变量定义为一个复杂的表达式,用call函数根据不同的参数对它进行展开来获取不同的结果。
    这也是下面要说的自定义函数的实现方式。函数的语法:$(call VARIABLE,PARAM,PARAM,...)

自定义函数

自定义函数本质上是多行变量,是自定义的命令的集合。它是在规则中被使用的一种过程调用,没有返回值。

define introduce
    @echo "$(0)"
    @echo "my name is $(1)"
endef

all :
    $(call introduce,madpenguin)

.PHONY : all

上面例子的输出结果是

introduce
my name is madpenguin

makefile中不支持真正的自定义函数,从上面可以看出

  • 自定义函数的本质是多行变量
  • 预定义的call函数在调用时将参数传给多行变量
  • 自定义的函数是call函数的实参,并在call函数中被执行
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容