Co to jest? = W Makefile

97
KDIR ?= $(shell uname -r)

Jakie jest znaczenie ?=?

Mam rozumieć różnicę między :=, +=a =od innego wątku dostępnych w przepełnienie stosu, ale nie może znaleźć wytłumaczenie ?=.

codedoc
źródło

Odpowiedzi:

141

?=wskazuje, aby ustawić KDIRzmienną tylko wtedy, gdy nie jest ustawiona / nie ma wartości.

Na przykład:

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

test:
    echo $(KDIR)

Wyświetliłoby „foo”

Podręcznik GNU: http://www.gnu.org/software/make/manual/html_node/Setting.html

Szymon
źródło
1
Czy to oznacza, że ​​KDIR jest już zadeklarowany gdzieś w systemie?
kodowanie,
1
Nie musi tak być, ponieważ ?=można go użyć do zastosowania wartości domyślnej / rezerwowej do zmiennej, może pozwalać KDIRna ustawienie w środowisku.
Simon,
1
@Simon Zauważ, że argumenty wiersza poleceń, które mają już nadpisać zmienne Makefile, bez potrzeby ?=.
CMCDragonkai