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”。
这里有一些问题询问如何取消设置变量 - 无论是通过 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”。