【问题标题】:Makefile unset variable from all further recipes来自所有其他配方的 Makefile 未设置变量
【发布时间】:2015-01-08 14:28:34
【问题描述】:

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

【问题讨论】:

    标签: makefile


    【解决方案1】:

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

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

    ifeq "$(origin VAR)" "environment"
    VAR =
    endif
    
    ifdef VAR
    ALIVE := 1
    else
    ALIVE := 0
    endif
    
    all:
            @echo $(ALIVE)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多