当“$@”不在 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 的调用方式或给出的参数),因此应用最终会生成这两个宏定义之一作为规则的操作。
# 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 的调用方式或给出的参数),因此应用最终会生成这两个宏定义之一作为规则的操作。