在Unix Make中调用命令

时间:2013-06-28 15:02:08

标签: unix makefile

我正在尝试理解一个makefile,任何人都可以告诉我以下行的内容:

@echo cp -f --preserve=mode,timestamps $(call $1,$<) $(call $1,$@)

特别是我在这里没有得到$1call的重要性。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

'call'命令是GNUmake中的GNU扩展; POSIX make或其他大多数产品都不支持它。它基本上用参数扩展宏。像

这样的东西
$(call A,b,c,d)

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

的定义中

请参阅the GNUmake documentation