为什么 Makefile 表达式 "export INTEGER_VAR ?= $(if $(BOOL_VAR),2,5)" 在 BOOL_VAR 为假时导致 INTEGER_VAR=2?

Why does the Makefile expression "export INTEGER_VAR ?= $(if $(BOOL_VAR),2,5)" result in INTEGER_VAR=2 when BOOL_VAR is false?

我的 Makefile 有一行内容如下:

export INTEGER_VAR ?= $(if $(BOOL_VAR),2,5)

然后INTEGER_VAR用于在以下几行中做出一些决定。

当我执行 make BOOL_VAR=false 时,INTEGER_VAR2

的值

谁能帮我弄清楚为什么?

我正在使用 GNU Make 版本 4.2.1

因为 $(if 只检查 empty/non-empty。它没有类型或 truefalse 之类的概念。因此,BOOL_VAR=false 测试的东西 $(BOOL_VAR) 不是空字符串,因此在逻辑上是正确的。