Makefile中,call `$(call)` 函数

在Makefile中,`$(call ...)` 是一个函数调用语法,它允许你定义一个名为函数的宏,并在Makefile的其他地方调用它。这种功能提供了一种重用Makefile中复杂或经常重复的代码的方法。

`$(call ...)` 语法的基本形式如下:

```make
$(call function_name,arg1,arg2,...)
```

这里,`function_name` 是你定义的函数的名称,而 `arg1, arg2, ...` 是传递给该函数的参数列表。

要在Makefile中定义一个函数,你可以使用 `define` 和 `endef` 指令:

```make
define function_name
# 函数体,可以使用 $(1), $(2), ... 来引用传递的参数
endef
```

在函数体内,`$(1)`, `$(2)`, ... 用来引用传递给函数的参数。

例如,假设我们有一个简单的函数,该函数将两个参数连接在一起,并在它们之间添加一个空格:

```make
define concatenate
$(1) $(2)
endef

all:
@echo $(call concatenate,Hello,World)
```

当你运行 `make all` 时,它将输出 `Hello World`。

在你的例子中,`$(call if_changed,u-boot-spl)` 调用了一个名为 `if_changed` 的函数,并传递了 `u-boot-spl` 作为参数。这个函数可能检查目标文件(如 `u-boot-spl`)是否自上次构建以来已经改变,如果改变了,则重新执行与 `u-boot-spl` 相关的构建命令。

`if_changed` 函数通常是在一些复杂的构建系统中预定义的,用于处理常见的构建和依赖检查逻辑。它不是GNU make的标准部分,但可能是某个特定项目或构建系统(如U-Boot的构建系统)中定义的。

使用 `$(call ...)` 可以使Makefile更加模块化和可维护,因为它允许你将复杂的逻辑封装在可重用的函数中。

posted on 2024-05-28 21:44  zxddesk  阅读(135)  评论(0编辑  收藏  举报

导航