【问题标题】:Environment variable expansion in gmakegmake中的环境变量扩展
【发布时间】:2014-03-12 15:58:34
【问题描述】:

我在 gmake 中遇到以下代码的问题,因为它可以与 clearmake 一起使用。

TEST_ENV :=
TEST_ENV +=
ifdef TEST_ENV
     TEST_ENV += Hello
endif
all:
        echo TEST_ENV=${TEST_ENV}

当我们在 clearmake 中运行这个 makefile 时,没有定义 TEST_ENV,也没有进入 ifdef 块,而在 gmake 中,TEST_ENV 被定义并进入了 ifdef 块。

输出:

在 clearmake 中:TEST_ENV=

在 gmake 中:TEST_ENV=Hello

clearmake和gmake通用的条件语句怎么写

【问题讨论】:

    标签: gnu-make


    【解决方案1】:

    如果您在 GNU make 仿真模式下运行 clearmake,这是 clearmake 中的一个错误,应该报告。除此之外,您没有说明您更喜欢这两种行为中的哪一种,因此我们无法真正帮助您。

    每当您将值附加到变量时,总是会在旧值和新值之间添加一个空格。即使其中一个或两个值为空字符串,仍会添加空格。所以你的例子:

    TEST_ENV :=
    TEST_ENV +=
    

    实际上留下TEST_ENV 包含一个空格,并且根据make 不为空(对于make,空表示零长度字符串)。

    如果您想将仅包含空格的字符串视为空,您可以使用:

    ifeq($(strip $(TEST_ENV)),)
        TEST_ENV += Hello
    endif
    

    或者你也可以使用:

    TEST_ENV :=
    TEST_ENV +=
    
    TEST_ENV := $(strip $(TEST_ENV))
    

    【讨论】:

    • 非常感谢您的回答。但我想要的是,在 gmake 中我想如何区分以下两种情况:TEST_ENV +=TEST_ENV += Hello 如果我的 TEST_ENV 包含 Hello(一些字符串),我想要
    • 在gmake中,如果我的变量设置为空,我不想进入if块并且变量设置为非空我想进入if块。请帮助我。
    • ifdef 之前,TEST_ENV 包含一个空格(至少在 gmake 中)。你认为这是空的还是非空的?
    • 如果你想把一个只包含空格的变量计算为空,那么你应该使用$(strip $(TEST_ENV))来去掉它们。
    • @bobogo,我认为这是空字符串。更具体地说,我想区分一个包含单个空格并包含一些字符串的 ENV 变量。
    【解决方案2】:

    感谢您的回复。

    它正在使用strip函数。

    TEST_ENV := TEST_ENV += ifeq ($(strip $(TEST_ENV)),) endif

    【讨论】:

      猜你喜欢
      • 2020-03-04
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 2012-06-06
      • 2023-03-30
      相关资源
      最近更新 更多