make的模式规则如何区分调用者?

How make's Pattern-rules distinguish callers?

我正在阅读dist section of Makefile

它包含我不知道的语法: http://www.gnu.org/software/make/manual/make.html#Pattern-Rules

为什么要使用像“%-operation: echo ...”这样的规则? "all-recursive"、"clean-recursive"、"install-recursive"、"uninstall-recursive"、"distcheck-recursive" - 它们都匹配规则 %-递归,

我不明白 % 规则在这些不同情况下的工作方式有何不同

我不确定我是否理解你的问题:不是很清楚。

但是,我认为您要问的是,如果同一规则用于一系列目标(匹配 % 模式字符),那么您如何知道真正的目标是什么?

这是使用 automatic variables 完成的。这些在任何规则中都有助于减少拼写错误并使食谱更易于阅读,但它们最初是为在隐式规则中使用而创建的,它们在那里绝对是必不可少的。

在模式规则的配方中,$@ 变量将扩展为正在构建的目标的名称,$< 将扩展为第一个先决条件,$* 将扩展到与模式匹配的目标部分。所以对于这样的规则:

%-foo : %-bar
        echo $@ / $< / $*

当 make 构建目标 blah-foo 时,输出将是:

blah-foo / blah-bar / blah