Was ist? = In Makefile

93
KDIR ?= $(shell uname -r)

Was bedeutet das ?=?

Ich habe den Unterschied zwischen verstanden :=, +=und =von einem anderen Thread in Stack - Überlauf, aber nicht in der Lage , um die Erklärung zu finden ?=.

codedoc
quelle

Antworten:

129

?=Gibt an, dass die KDIRVariable nur gesetzt werden soll, wenn sie nicht gesetzt ist / keinen Wert hat.

Beispielsweise:

KDIR ?= "foo"
KDIR ?= "bar"

test:
    echo $(KDIR)

Würde "foo" drucken

GNU-Handbuch: http://www.gnu.org/software/make/manual/html_node/Setting.html

Simon
quelle
1
Bedeutet das, dass KDIR bereits irgendwo im System deklariert ist?
Codedoc
1
Dies muss nicht der Fall sein, da ?=ein Standard- / Fallback-Wert auf eine Variable angewendet werden kann und KDIRmöglicherweise in der Umgebung festgelegt werden kann.
Simon
1
@Simon Beachten Sie, dass Befehlszeilenargumente Makefile-Variablen bereits überschreiben müssen, ohne dass dies erforderlich ist ?=.
CMCDragonkai