Makefile 从所有进一步的配方中取消设置变量

Makefile unset variable from all further recipes

这里有一些问题询问如何取消设置变量 - 无论是通过 unexport 还是 undefine。我正在使用 GNU make 3.81,所以后者不是一个选项,但前者对我来说不太适用。例如,我想取消设置一个变量,如果它来自这个 makefile 中其余食谱的环境。这是一个示例 makefile,如果从环境中设置了 VAR,我希望它打印 0,但按原样打印 1:

ifdef VAR
ifeq "$(origin VAR)" "environment"
unexport VAR
endif
endif

ifdef VAR
ALIVE := 1
else
ALIVE := 0
endif

all:
    @echo $(ALIVE)

在那种情况下我怎样才能让它打印 0?那可能吗?

unexport 只是告诉 make 不要将该变量导出到它运行的任何配方中。这与变量是否在inside make中定义没有任何关系,这是ifdef命令测试的内容。

ifdef 仅检查变量是否具有非空值,因此您可以使用:

ifeq "$(origin VAR)" "environment"
VAR =
endif

ifdef VAR
ALIVE := 1
else
ALIVE := 0
endif

all:
        @echo $(ALIVE)

将其设置为空值并让 make 在此处打印“0”。