2013-06-28 53 views
0

我试图理解一个makefile,谁能告诉我下面的行所做的:呼叫命令让

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

尤其是我不明白什么是$1call这里的意义。

回答

0

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

它看起来像我这个值应该被传递给另一个实例$(call ...)。因此,举例来说,如果你的Makefile有:

QUOTE = '$1' 
COPY = @echo cp -f --preserve=mode,timestamps $(call $1,$<) $(call $1,[email protected]) 

再后来,你会看到类似这样的:

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' 

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

+0

感谢。但是我没有得到'呼叫'的用途。我读了make手册,但我仍然困惑 – psykosonik

+0

那么,你应该问那个问题。这不是一个特别好的例子,可以帮助你了解什么叫做IMO。 Call可以让你定义你自己的函数(类型),它带有参数。你可以用“$ 1”,“$ 2”等作为第一,第二等参数的占位符,将“函数”的主体放入一个变量中。然后当你想“运行”这个函数时,你把变量名和参数值传给'$(call ...)'。 – MadScientist

0

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

$(call A,b,c,d) 

东西将扩大宏观A的论据bcd。该参数被分配到临时宏$(1)$(2),...这可能是存在于A

定义见the GNUmake documentation