makefile @(call)
时间: 2023-08-09 20:11:00 浏览: 129
Call函数是GNU Make中的一个内置函数,用于在Makefile中调用其他函数。通过使用call函数,可以传递参数并执行指定的函数。
使用call函数的语法如下:
```
$(call function,arg1,arg2,...)
```
其中,`function`是要调用的函数名称,`arg1,arg2,...`是传递给该函数的参数。
下面是一个简单的示例,展示如何在Makefile中使用call函数:
```makefile
# 定义一个函数
define say_hello
@echo Hello, $(1)!
endef
# 调用函数
all:
$(call say_hello, World)
```
在上面的示例中,我们定义了一个名为`say_hello`的函数,它接受一个参数,并输出"Hello, 参数值!"。然后,我们在`all`目标中使用了call函数来调用这个函数,并传递了参数"World"。
运行`make all`命令时,Make会执行这个规则,并输出"Hello, World!"。
相关问题
makefile call
在Makefile中,`$(call PROGRAM_template, (callPROGRAMtemplate,(prog)))`是一个特殊的函数调用语法。它用于展开一个名为`PROGRAM_template`的函数,并将`(callPROGRAMtemplate,(prog))`作为参数传递给该函数。
具体来说,`$(call PROGRAM_template, (callPROGRAMtemplate,(prog)))`的作用是调用名为`PROGRAM_template`的函数,并将`(callPROGRAMtemplate,(prog))`作为参数传递给该函数。在这个例子中,`PROGRAM_template`是一个自定义的函数模板,而`(callPROGRAMtemplate,(prog))`则是一个展开后的表达式。
根据提供的引用[1]和[2],我们可以得到以下展开结果:
对于server程序:
```makefile
server : $(server_OBJS) $(serverO BJS) $(server_LIBS)
$(CC) $(LDFLAGS) $^ -o $@
```
对于client程序:
```makefile
client : $(client_OBJS) $(clientO BJS) $(client_LIBS)
$(CC) $(LDFLAGS) $^ -o $@
```
这些展开结果定义了如何编译链接server和client程序。每个程序的目标文件列表由相应的变量指定,例如`$(server_OBJS)`表示server程序的目标文件列表。然后使用C编译器和链接器进行编译链接操作,生成可执行文件。
could the call function in makefile call two macros simutaneously?
Yes, the `call` function in Makefile can be used to call multiple macros simultaneously. To do this, you can use the `$(eval ...)` function to evaluate a sequence of multiple macro invocations as a single unit.
Here is an example that demonstrates how to use `call` to invoke two macros simultaneously:
```
define macro1
@echo "This is macro1"
endef
define macro2
@echo "This is macro2"
endef
define call_both_macros
$(eval $(call macro1))
$(eval $(call macro2))
endef
all:
$(call call_both_macros)
```
In this example, we've defined two macros `macro1` and `macro2`, and then defined another macro called `call_both_macros` that calls both `macro1` and `macro2` using the `call` function and the `$(eval ...)` function.
When we run `make`, the `all` target is executed, which invokes `call_both_macros`. This, in turn, invokes `macro1` and `macro2`, and the output will be:
```
This is macro1
This is macro2
```
So, the `call` function can indeed be used to call multiple macros simultaneously in Makefile.
阅读全文