什么是?=在Makefile中

cod*_*doc 69 linux makefile linux-kernel

KDIR ?= $(shell uname -r)
Run Code Online (Sandbox Code Playgroud)

是什么意思?=

我已经明白之间的差别:=,+==从堆栈溢出可用,但无法另一个线程来寻找解释?=.

Sim*_*mon 98

?=表示KDIR仅在未设置/没有值的情况下设置变量.

例如:

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

test:
    echo $(KDIR)
Run Code Online (Sandbox Code Playgroud)

会打印"foo"

  • 不必如此,因为`?=` 可用于将默认/回退值应用于变量,它可能允许在环境中设置`KDIR`。 (2认同)
  • @Simon 请注意,make 的命令行参数已经覆盖了 Makefile 变量,而无需 `?=`。 (2认同)

cod*_*doc 8

感谢Simon和RT的快速和正确的回复.

另外,我找到了GNU手册,详细解释了所有内容:http: //www.gnu.org/software/make/manual/html_node/Setting.html