Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
unixmake中的Call命令_Unix_Makefile - Fatal编程技术网

unixmake中的Call命令

unixmake中的Call命令,unix,makefile,Unix,Makefile,我正在尝试理解一个makefile,有人能告诉我下面这行代码的作用吗: @echo cp -f --preserve=mode,timestamps $(call $1,$<) $(call $1,$@) @echo cp-f--preserve=mode,timestamps$(调用$1,$由于它完全脱离上下文,所以无法知道它的作用 在我看来,这个值应该传递给另一个$(call…)实例。例如,如果您的makefile具有: QUOTE = '$1' COPY = @echo cp -f

我正在尝试理解一个makefile,有人能告诉我下面这行代码的作用吗:

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

@echo cp-f--preserve=mode,timestamps$(调用$1,$由于它完全脱离上下文,所以无法知道它的作用

在我看来,这个值应该传递给另一个
$(call…
)实例。例如,如果您的makefile具有:

QUOTE = '$1'
COPY = @echo cp -f --preserve=mode,timestamps $(call $1,$<) $(call $1,$@)
第一个调用将扩展到
COPY
值,并将
$1
替换为
QUOTE
,因此它将是:

@echo cp -f --preserve=mode,timestamps $(call QUOTE,bar) $(call QUOTE,foo)
然后它被扩展,你会得到:

@echo cp -f --preserve=mode,timestamps 'bar' 'foo'

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

调用命令是GNUmake中的GNU扩展;POSIX make或大多数其他make都不支持它。它基本上用参数扩展宏。类似于

$(call A,b,c,d)
将使用参数
b
c
d
展开宏
A
。这些参数被分配给临时宏
$(1)
$(2)
,…这些参数可能出现在
A
的定义中


请参见

谢谢。但我不知道“调用”的用途。我读了《生成手册》,但仍然感到困惑。那么,你可能应该问这个问题。这不是学习调用的一个特别好的例子。调用让你定义自己的函数(某种程度上)来获取参数。你把“函数”的主体放在使用
$1
$2
等作为第一个、第二个等参数的占位符,将其放入变量中。然后,当您要“运行”函数时,将变量名称加上参数值传递给
$(调用…
)。
$(call A,b,c,d)