这些是自动变量: $@规则目标的文件名。如果目标是归档成员,则'$@'是归档文件的名称。在具有多个目标的模式规则中(请参阅模式规则简介),'$@'是导致规则配方运行的目标的名称。 $〈第一个先决条件的名称。如果目标从隐式规则中获得配方,则这将是隐式规则添加的第一个先决条件(请参阅隐式规则)。 它们用于构建可应用于不同目标的规则,这样就不需要为必须处理的每个文件重复相同的规则... PS:为了找到答案,我首先查找GNU make的'all documentation on a single page',然后使用浏览器的搜索功能...
2条答案
按热度按时间4ioopgfo1#
这些是自动变量:
$@规则目标的文件名。如果目标是归档成员,则'$@'是归档文件的名称。在具有多个目标的模式规则中(请参阅模式规则简介),'$@'是导致规则配方运行的目标的名称。
$〈第一个先决条件的名称。如果目标从隐式规则中获得配方,则这将是隐式规则添加的第一个先决条件(请参阅隐式规则)。
它们用于构建可应用于不同目标的规则,这样就不需要为必须处理的每个文件重复相同的规则...
PS:为了找到答案,我首先查找GNU make的'all documentation on a single page',然后使用浏览器的搜索功能...
ttvkxqim2#
在Makefile中,
$<
和$@
是执行规则时由make实用程序展开的特殊符号。$<
是规则的第一个先决条件(即输入文件)的名称。例如,如果规则为output: input1 input2
,则$<
将扩展为input1
。$@
是规则目标(即输出文件)的名称。在上例中,$@
将扩展为output
下面是如何在Makefile中使用这些符号的示例:
在本例中,make实用程序将
$<
扩展为input1
,将$@
扩展为output
,因此实际执行的命令将是command1 input1 output
。这些符号可用于规则中的任何命令,而不仅仅是第一个命令。例如:
在这种情况下,make实用程序将按如下方式展开符号:
command1 $<
将扩展为command1 input1
command2 $@
将扩展为command2 output
command3 $< $@
将扩展为command3 input1 output