Makefile 函数

GNU make 提供了大量的函数用来处理文件名、变量、文本和命令。通过这些函数,用户可以节省很多精力,编写出更加灵活和健壮的Makefile。函数的使用和变量引用的展开方式相同:

$(function arguments)
${function arguments}

关于函数的使用格式,有以下需要注意的地方:

  • 函数主要分为两类:make内嵌函数和用户自定义函数。对于 GNU make内嵌的函数,直接引用就可以了;对于用户自定义的函数,要通过make的call函数来间接调用。
  • 函数和参数列表之间要用空格隔开,多个参数之间使用逗号隔开。
  • 如果在参数中引用了变量,变量的引用建议和函数引用使用统一格式:要么是一对小括号,要么是一对大括号。

函数使用示例:如果我们想要获取某个目录下所有的C文件列表,可以使用扩展通配符函数:wildcard

SRC  = $(wildcard *.c)
HEAD = $(wildcard *.h)

all:
    @echo "SRC = $(SRC)"
    @echo "HEAD = $(HEAD)"

在当前目录下,我们新建一些C文件和H文件,然后使用make命令:

# ls
add.c  add.h  hello.c  main.c  makefile  sub.c  sub.h
# make
SRC = hello.c main.c add.c sub.c
HEAD = add.h sub.h

用户自定义函数

GNU make提供了大量的内嵌函数,大大方便了用户Makefile的编写。但有时候根据需要,用户也可以自定义一些函数,然后在Makefile中引用它们:

PHONY: all

define func
    @echo "pram1 = $(0)"
    @echo "pram2 = $(1)"
endef

all:
    $(call func, hello zhaixue.cc)

用户自定义函以define开头,endef结束,给函数传递的参数在函数中使用$(0)、$(1)引用,分别表示第1个参数、第2个参数…
对于用户自定义函数,在Makefile中要使用call函数间接调用,各个参数之间使用空格隔开:

# make
pram1 = func
pram2 =  hello zhaixue.cc
《Makefile工程实践》视频教程,一线开发工程师独家录制,网上首家讲解Makefile的实战课程。从零开始,教你一步一步编写一个工程项目的Makefile,支持使用第三方静态库、动态库,支持指定模块或目录编译生成静态库、动态库,赠送企业级的Makefile模板,学完即可拿来使用,投入项目开发实战,具备独立开展项目开发和管理的能力。详情请点击淘宝链接:Linux三剑客