当“$@”不在 Makefile 的规则中时,它是什么意思?

What does ‘$@’ mean when it isn't in a rule of a Makefile?

# Linker scripts preprocessor (.lds.S -> .lds)
# ---------------------------------------------------------------------------
quiet_cmd_cpp_lds_S = LDS     $@
      cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -U$(ARCH) \
                         -D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $<

$(obj)/%.lds: $(src)/%.lds.S FORCE
    $(call if_changed_dep,cpp_lds_S)

上面是 scripts/Makfile.build.I 中的代码正在读取 arch/arm/kernel/vmlinux.lds.S,我找不到链接器的 'INPUT' script.I 猜到 'INPUT' 是在 vmlinux.lds.S 设置时设置的 compiled.Then 我找到了代码 above.I 了解到 '$@' 是文件名rule.But 的目标的这个不在 rule.So 它代表什么以及 'INPUT'?

在哪里

您没有显示它,但几乎可以肯定 if_changed_dep 是该 makefile 中别处定义的另一个宏,它扩展为 $(quiet_cmd_)$(cmd_)(可能是取决于 make 的调用方式或给出的参数),因此应用最终会生成这两个宏定义之一作为规则的操作。