I'm trying to understand a makefile, can anyone tell me what the following line does:
@echo cp -f --preserve=mode,timestamps $(call $1,$<) $(call $1,$@)
Especially I don't get what is the significance of $1
and call
here.
'call' 命令是 GNUmake 中的一个 GNU 扩展;POSIX 品牌或大多数其他品牌不支持它。它基本上扩展了带有参数的宏。就像是
$(call A,b,c,d)
A
将使用参数b
、c
和扩展宏d
。参数被分配给临时宏$(1)
, $(2)
, ... 可能出现在A
请参阅GNUmake 文档
没有办法知道这是做什么的,因为它完全脱离了上下文。
在我看来,这个值应该被传递给$(call ...)
. 因此,例如,如果您的 makefile 具有:
QUOTE = '$1'
COPY = @echo cp -f --preserve=mode,timestamps $(call $1,$<) $(call $1,$@)
然后稍后您会看到类似的内容:
foo: bar ; $(call COPY,QUOTE)
第一次调用将扩展为替换为的COPY
值,因此它将是:$1
QUOTE
@echo cp -f --preserve=mode,timestamps $(call QUOTE,bar) $(call QUOTE,foo)
然后它被扩展,你最终得到:
@echo cp -f --preserve=mode,timestamps 'bar' 'foo'
但如果没有更多信息,我们不能说更多。