0

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.

4

2 回答 2

0

'call' 命令是 GNUmake 中的一个 GNU 扩展;POSIX 品牌或大多数其他品牌不支持它。它基本上扩展了带有参数的宏。就像是

$(call A,b,c,d)

A将使用参数bc和扩展宏d。参数被分配给临时宏$(1), $(2), ... 可能出现在A

请参阅GNUmake 文档

于 2013-06-28T16:46:22.057 回答
0

没有办法知道这是做什么的,因为它完全脱离了上下文。

在我看来,这个值应该被传递给$(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'

但如果没有更多信息,我们不能说更多。

于 2013-06-28T15:08:38.137 回答