O que é? = No Makefile

97
KDIR ?= $(shell uname -r)

Qual é o significado de ?=?

Tenho entendido a diferença entre :=, +=e =de outro segmento disponível no Stack Overflow, mas incapaz de encontrar a explicação para ?=.

codedoc
fonte

Respostas:

141

?=indica para definir a KDIRvariável apenas se não estiver definida / não tiver um valor.

Por exemplo:

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

test:
    echo $(KDIR)

Imprimiria "foo"

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

Simon
fonte
1
Isso significa que o KDIR já está declarado em algum lugar do sistema?
codedoc
1
Não precisa ser, uma vez que ?=pode ser usado para aplicar um valor default / fallback a uma variável, pode estar permitindo KDIRsua configuração no ambiente.
Simon
1
@Simon Observe que os argumentos da linha de comando para fazer já sobrescrevem as variáveis ​​do Makefile sem a necessidade de ?=.
CMCDragonkai