我试图理解一个makefile,谁能告诉我下面的行所做的:呼叫命令让
@echo cp -f --preserve=mode,timestamps $(call $1,$<) $(call $1,[email protected])
尤其是我不明白什么是$1
和call
这里的意义。
我试图理解一个makefile,谁能告诉我下面的行所做的:呼叫命令让
@echo cp -f --preserve=mode,timestamps $(call $1,$<) $(call $1,[email protected])
尤其是我不明白什么是$1
和call
这里的意义。
没有办法知道它做了什么,因为它完全脱离了上下文。
它看起来像我这个值应该被传递给另一个实例$(call ...)
。因此,举例来说,如果你的Makefile有:
QUOTE = '$1'
COPY = @echo cp -f --preserve=mode,timestamps $(call $1,$<) $(call $1,[email protected])
再后来,你会看到类似这样的:
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'
但没有更多信息,我们不能多说。
'call'命令是GNUmake中的一个GNU扩展;它在POSIX make或大多数其他版本中不受支持。它基本上用参数扩展宏。像
$(call A,b,c,d)
东西将扩大宏观A
的论据b
,c
和d
。该参数被分配到临时宏$(1)
,$(2)
,...这可能是存在于A
感谢。但是我没有得到'呼叫'的用途。我读了make手册,但我仍然困惑 – psykosonik
那么,你应该问那个问题。这不是一个特别好的例子,可以帮助你了解什么叫做IMO。 Call可以让你定义你自己的函数(类型),它带有参数。你可以用“$ 1”,“$ 2”等作为第一,第二等参数的占位符,将“函数”的主体放入一个变量中。然后当你想“运行”这个函数时,你把变量名和参数值传给'$(call ...)'。 – MadScientist