我正在尝试理解一个makefile,任何人都可以告诉我以下行的内容:
@echo cp -f --preserve=mode,timestamps $(call $1,$<) $(call $1,$@)
特别是我在这里没有得到$1
和call
的重要性。
答案 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)
将使用参数A
,b
和c
扩展宏d
。参数分配给临时宏$(1)
,$(2)
,...可能出现在A