gmake中的环境变量扩展

时间:2014-03-12 15:58:35

标签: gnu-make

我在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

共有的条件语句

2 个答案:

答案 0 :(得分:0)

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

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

TEST_ENV :=
TEST_ENV +=

实际上将TEST_ENV留作包含空格,并且根据make不是空的(make,empty表示零长度字符串)。

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

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

或者您也可以使用:

TEST_ENV :=
TEST_ENV +=

TEST_ENV := $(strip $(TEST_ENV))

答案 1 :(得分:0)

感谢您的回复。

它正在使用条带功能。

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