Variável make específica do padrão com base no nome de destino de nível mais alto

Variável make específica do padrão com base no nome de destino de nível mais alto

Meta

No caso usual de um alvo (alvo mãe) chamando outro alvo (alvo filho) como pré-requisito, eu gostaria de atribuir uma variável específica do padrão (veja opágina de manual) com as seguintes condições:

  • O valor da variável é baseado no alvo mãe.
  • O alvo filho precisa desta variável

Contexto

Posso reduzir meu caso de uso ao seguinte. Usarei uma variável específica do alvo em vez de uma variável específica do padrão para simplificar (o problema é o mesmo). Aqui está o Makefile:

mother-target: VAR = Var-$@
mother-target: child-target

child-target:
    echo VAR=$(VAR)

makeproduzirá VAR=Var-child-targete eu gostaria que ele produzisse VAR=Var-mother-target.

Pergunta:Como referir-se ao nome do alvo que define a variável? A @variável automática parece sempre resolver para o "último" alvo da cadeia.

Tentativas:

  • VARcomo uma variável simplesmente expandida, ou seja mother-target: VAR := Var-$@, . Mas $@está vazio.
  • Declarar VARprivado para que não seja herdado não se adequa ao meu caso de uso: o destino filho precisa da variável.

O caso real é com uma variável específica do padrão onde ter o nome do alvo resolvido seria realmente útil (ou seja %-target: VAR = Var-$@)

informação relacionada