2016-08-04 49 views
2

Ist es möglich, Variable Expansion in meinem Makefile für einen bestimmten Abschnitt zu "deaktivieren"?Dollars in Makefile Umgebungsvariablen

Hier ist ein Beispiel für das Problem das ich habe:

print_command: 
    @echo '$(COMMAND)' 

Und hier ist der Ausgang Ich erhalte:

$ export COMMAND='My favourite shell is $SHELL' 
$ make print_command 
My favourite shell is HELL 
$ make print_command COMMAND='Welcome to $SHELL' 
Welcome to HELL 

Und was würde ich bekommen:

$ export COMMAND='My favourite shell is $SHELL' 
$ make print_command 
My favourite shell is $SHELL 
$ make print_command COMMAND='Welcome to $SHELL' 
Welcome to $SHELL 

Ist es möglich, dies zu tun, ohne einen Doppel-Dollar wie folgt zu verwenden:

$ export COMMAND='My favourite shell is $$SHELL' 
$ make print_command 
My favourite shell is $SHELL 
$ make print_command COMMAND='Welcome to $$SHELL' 
Welcome to $SHELL 

In seiner einfachsten Form suche ich nach dem genauen Inhalt der Variablen COMMAND ohne make Mangling es.

Antwort

2

Fügen Sie eine $$ Doppel-Dollar und doppelte Anführungszeichen hinzu.

print_command: 
       @echo "$$COMMAND" 

Wie,

$ export COMMAND='My favourite shell is $SHELL'; make print_command 
My favourite shell is $SHELL 

Schauen Sie sich diese How to Use Variables Seite von der GNU make Seite.

Wenn Sie nur ein einfaches Angebot hinzufügen, make druckt buchstäblich die Variable: - z. mit

print_command: 
       @echo '$$COMMAND' 
$ export COMMAND='My favourite shell is $SHELL'; make print_command 
$COMMAND 

Da $ eine besondere Bedeutung in Makefile trägt und dass muss entwertet werden. Wenn Sie make müssen den Wert für die Variable erweitern definiert, verwenden Sie eine value Syntax als

print_command: 
       @echo $(value COMMAND) 
$ export COMMAND='My favourite shell is $SHELL'; make print_command 
My favourite shell is /bin/bash 

Im obigen Fall, wird der Wert der Umgebungsvariablen /bin/bash erweitert.

+0

Das ist perfekt, danke! –

+1

Ist es möglich, es in der Befehlszeile ohne 'export' zu übergeben (d. H. Nach' make', aber ohne doppelten Dollar?) Ich nehme an, dass es nicht ist, da es die Definition im Makefile selbst hat. –