KDIR ?= $(shell uname -r)

Что означает ?=?

Я понял разницу между :=, += и = из другого потока, доступного в Stack Overflow, но не могу найти объяснения для ?=.

154
codedoc 16 Июл 2014 в 13:36

2 ответа

Лучший ответ

?= указывает на установку переменной KDIR, только если она не установлена ​​/ не имеет значения.

Например:

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

test:
    echo $(KDIR)

Напечатал бы "foo"

Руководство GNU: http://www.gnu.org/software/make/ manual / html_node / Setting.html

214
rado 1 Май 2020 в 19:22
1
Значит ли это, что KDIR уже где-то заявлен в системе?
 – 
codedoc
16 Июл 2014 в 13:49
2
Этого не должно быть, поскольку ?= можно использовать для применения значения по умолчанию / резервного значения к переменной, это может позволить установить KDIR в среде.
 – 
Simon
16 Июл 2014 в 13:59
2
Обратите внимание, что аргументы командной строки make уже переопределяют переменные Makefile без необходимости использования ?=.
 – 
CMCDragonkai
22 Авг 2018 в 07:52

Благодаря Саймону и Р.Т. за быстрый и правильный ответ.

Кроме того, я нашел руководство GNU, в котором все подробно объясняется: http://www.gnu.org/software/make/manual/html_node /Setting.html

14
codedoc 17 Июл 2014 в 15:49