unixmake中的Call命令
我正在尝试理解一个makefile,有人能告诉我下面这行代码的作用吗:unixmake中的Call命令,unix,makefile,Unix,Makefile,我正在尝试理解一个makefile,有人能告诉我下面这行代码的作用吗: @echo cp -f --preserve=mode,timestamps $(call $1,$<) $(call $1,$@) @echo cp-f--preserve=mode,timestamps$(调用$1,$由于它完全脱离上下文,所以无法知道它的作用 在我看来,这个值应该传递给另一个$(call…)实例。例如,如果您的makefile具有: QUOTE = '$1' COPY = @echo cp -f
@echo cp -f --preserve=mode,timestamps $(call $1,$<) $(call $1,$@)
@echo cp-f--preserve=mode,timestamps$(调用$1,$由于它完全脱离上下文,所以无法知道它的作用
在我看来,这个值应该传递给另一个$(call…
)实例。例如,如果您的makefile具有:
QUOTE = '$1'
COPY = @echo cp -f --preserve=mode,timestamps $(call $1,$<) $(call $1,$@)
第一个调用将扩展到COPY
值,并将$1
替换为QUOTE
,因此它将是:
@echo cp -f --preserve=mode,timestamps $(call QUOTE,bar) $(call QUOTE,foo)
然后它被扩展,你会得到:
@echo cp -f --preserve=mode,timestamps 'bar' 'foo'
但是如果没有更多的信息,我们不能说更多。调用命令是GNUmake中的GNU扩展;POSIX make或大多数其他make都不支持它。它基本上用参数扩展宏。类似于
$(call A,b,c,d)
将使用参数b
、c
和d
展开宏A
。这些参数被分配给临时宏$(1)
、$(2)
,…这些参数可能出现在A
的定义中
请参见谢谢。但我不知道“调用”的用途。我读了《生成手册》,但仍然感到困惑。那么,你可能应该问这个问题。这不是学习调用的一个特别好的例子。调用让你定义自己的函数(某种程度上)来获取参数。你把“函数”的主体放在使用$1
、$2
等作为第一个、第二个等参数的占位符,将其放入变量中。然后,当您要“运行”函数时,将变量名称加上参数值传递给$(调用…
)。
$(call A,b,c,d)