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值,因此它将是:$1QUOTE
@echo cp -f --preserve=mode,timestamps $(call QUOTE,bar) $(call QUOTE,foo)
然后它被扩展,你最终得到:
@echo cp -f --preserve=mode,timestamps 'bar' 'foo'
但如果没有更多信息,我们不能说更多。