Makefile call 函数

通过前面的学习我们已经知道:如果想在Makefile中调用GNU make的内置函数,我们使用下面的形式调用:

$(function arguments)
${function arguments}

如果想调用用户自定义的函数,则只能使用call函数来间接调用了:

PHONY: all

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

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

我们给函数传递的参数,在函数内部可以使用$(0)、$(1)…直接使用。call函数是唯一一个可以用来创建新的参数化的函数。call函数不仅可以用来调用一个用户自定义函数并传参,还可以向一个表达式传参:

$(call <expression>,<parm1>,<parm2>,<parm3>...)

当 make 执行这个函数时,expression表达式中的参数变量,如$(1),$(2),$(3)等,会被参数parm1,parm2,parm3依次取代。而expression的返回值就是 call 函数的返回
值。

.PHONY: all

param = $(1) $(2)
reverse_param = $(2) $(1)

str1 = $(call param, hello, zhaixue.cc)
str2 = $(call reverse_param, hello, zhaixue.cc)

all:
    @echo "str1 = $(str1)"
    @echo "str2 = $(str2)"

执行make命令,运行结果为:

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