在规则之外访问$@(规则目标的文件名)

在规则之外访问$@(规则目标的文件名)

假设我想要一个程序(比如说Some_Command)从命令行获取目标的名称作为它的一个参数(通过标志传递-p),并且我希望调用该命令的参数包含在一个COMMON_ARG我可以重复使用的变量(比如说)中。 我知道我可以使用 访问目标的名称$@,但我相信这个变量只有一个值从规则内部。有什么办法可以推迟该变量的评估吗?

通常,我想要

COMMON_ARG:= "-p $@"
foo:bar
    Some_Command $(COMMAND_ARG) $< -o $@

这样就Make bar调用了

Some_Command -p foo bar -o foo

答案1

=如果你用(而不是)声明一个变量:=,它将是递归扩展无论它在哪里使用,而不是在声明时。因此

COMMON_ARG = -p $@
foo: bar
        Some_Command $(COMMAND_ARG) $< -o $@

$@将在配方内扩展,给出您想要的效果。

相关内容