我在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
共有的条件语句答案 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