Donnerstag, Mai 28, 2020

Bedingt Anhängen an eine variable innerhalb einer Makefile-target

Habe ich ein GNU Makefile, das sieht ein bisschen aus wie diese:

LIST = item1

.PHONY: targetMain targetA targetB preA preB

targetMain:
# DO all the work in here
    echo $(LIST)

targetA: preA targetMain
targetB: preB targetMain

preA:
LIST += itemA

preB:
LIST += itemB

Die Idee ist, dass ich entweder machen targetA oder machen targetB. Beide eine sehr ähnliche Sache, aber eine andere Liste von Elementen. Das problem ist, dass die variable nicht bedingt angehängt, es ist immer angehängt, d.h. mein output ist immer „item1 itemA itemB“.

Wie kann ich bedingt anfügen an eine variable?

InformationsquelleAutor bramp | 2010-01-27

1 Kommentar

  1. 8
    LIST = item1
    
    .PHONY: targetMain targetA targetB
    
    targetMain:
    # DO all the work in here
        echo $(LIST)
    
    targetA: LIST+=itemA
    targetB: LIST+=itemB
    
    targetA targetB: targetMain
    
    • Eine kleine Erklärung: das nennt man target-spezifischen Variablen. Die Weise, die es funktioniert, ist es wirklich beiden LIST Variablen jetzt: eine für targetA und eine für targetB. target: VARIABLE = value syntax ist wie target-spezifische Variablen zugeordnet sind. Welche der beiden LIST Variablen erweitert wird, hängt davon ab, welche Ziel-Befehl ein Skript, das Sie in. Beachten Sie, dass, weil dieser, target-spezifische Variablen können mit nur aus verwiesen werden innerhalb der Kommando-Skript (Sie kann nicht verwiesen werden auf die prerequesites Linie, auch).
    • Super, das scheint zu tun, was ich will!!!
    • Danke, Dan, ich sollte Hinzugefügt haben einige Erklärung. 🙂

Kostenlose Online-Tests