基于最高级别目标名称的特定于模式的 make 变量

基于最高级别目标名称的特定于模式的 make 变量

目标

在目标(母目标)调用另一个目标(子目标)作为先决条件的通常情况下,我想分配一个特定于模式的变量(请参阅手册页),满足以下条件:

  • 变量的值基于母目标。
  • 子目标需要这个变量

语境

我可以将我的用例减少到以下。为了简单起见,我将使用特定于目标的变量而不是特定于模式的变量(问题是相同的)。这是生成文件:

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-$@

相关内容