1,call函数的定义是什么?
语法: $(call <expression> , <parm1>, <parm2>, <parm3>,...)
作用:当make执行时 expression 这个函数时,参数中的变量,如 $(1),$(2),$(3)等。会被参数<parm1>, <parm2>, <parm3>所代替。
例如:
reverser = $(1) $(2)
foo = $(call reverser,a,b)
#此时,foo的值就是 "a b".当然,参数的次序是可以自定义的,不一定是顺序的 如
reverser = $(2) $(1)
foo = $(call reverser,a,b)
#此时, foo 的值就是 "b a"。
2,eval函数的作用
查到最多的都是一句话可以概括 : 可以在Makefile中构建一个可变的规则结构关系。
上实例:
define EV
test : test.c
gcc -o test test.c
endef
$(eval $(call EV))
最终的编译规则会执行 gcc -o test test.c
看第二个(结合 call的定义):
T := test
S := test.c
define EV
$(1) : $(2)
gcc -o $(1) $(2)
endef
$(eval $(call EV,$(T),$(S)))
最终执行结果同上个例子一样