作者:天秤小果冻cici | 来源:互联网 | 2023-01-28 18:40
在make中,内置函数call用来扩展变量或者宏,它的语法如下:$(callmacro-name[,param1])call会扩展它的第一个参数并把其余参数依次替换到出现$1
在make中,内置函数call用来扩展变量或者宏,它的语法如下:
$(call macro-name[, param1 ...])
call会扩展它的第一个参数并把其余参数依次替换到出现$1、$2 ......的地方,macro-name 可以是任何宏或变量的名称。macro-name之后是宏的参数,并以逗号为分隔符。
call的第一个参数是一个非扩展式变量名称,即它并非以一个美元符号开始。call的参数检查机制非常简单,你可以为call指定任意多个参数。如果一个宏引用了一个参数$n,但是调用它的call实例并未指定相应的参数,那么该变量就会变成空值。如果call实例所指定的参数比宏的$n引用还多,那么在宏中并不会扩展额外的参数。
使用示例:
Makefile:
tbl = ./syscall_32.tbl
systbl = ./systbl.sh
changed = true
if_changed = $(if $changed, $(call $(1)) $<$@, @:)
a.h:$(tbl) $(systbl)
$(call if_changed, systbl)
systbl.sh:
#!/bin/sh
in="$1"
out="$2"
echo "begin to generate $out from $in ..."
运行结果:
$ make
./systbl.sh syscall_32.tbl a.h
begin to generate a.h from syscall_32.tbl ...