![基于最高级别目标名称的特定于模式的 make 变量](https://linux22.com/image/171179/%E5%9F%BA%E4%BA%8E%E6%9C%80%E9%AB%98%E7%BA%A7%E5%88%AB%E7%9B%AE%E6%A0%87%E5%90%8D%E7%A7%B0%E7%9A%84%E7%89%B9%E5%AE%9A%E4%BA%8E%E6%A8%A1%E5%BC%8F%E7%9A%84%20make%20%E5%8F%98%E9%87%8F.png)
目标
在目标(母目标)调用另一个目标(子目标)作为先决条件的通常情况下,我想分配一个特定于模式的变量(请参阅手册页),满足以下条件:
- 变量的值基于母目标。
- 子目标需要这个变量
语境
我可以将我的用例减少到以下。为了简单起见,我将使用特定于目标的变量而不是特定于模式的变量(问题是相同的)。这是生成文件:
mother-target: VAR = Var-$@
mother-target: child-target
child-target:
echo VAR=$(VAR)
make
将输出VAR=Var-child-target
,我希望它输出VAR=Var-mother-target
。
问题:如何引用定义变量的目标名称?自动变量@
似乎总是解析为链中的“最后一个”目标。
尝试:
VAR
作为一个简单的扩展变量,即mother-target: VAR := Var-$@
.却$@
是空空如也。- 声明
VAR
私有以便它不被继承不适合我的用例:子目标需要变量。
真实的情况是使用特定于模式的变量,其中解析目标的名称实际上是有用的(即%-target: VAR = Var-$@
)