在Makefile中,ifeq似乎将变量与设置值后面的注释结合使用

时间:2017-08-23 03:57:02

标签: makefile

我有这个Makefile。

HFLOAT = 1 # comment
$(info $(HFLOAT))
ifeq ($(HFLOAT), 1)
$(info HFLOAT is 1)
endif

如果我运行'make',它会给我

id@host:~/test] make
1 
make: *** No targets.  Stop.

哦,ifeq (..)结果是假的!所以“HFLOAT为1”不打印。

但是如果我在Makefile中移除上面的# comment,并且rut make,我得到了

id@host:~/test] make
1
HFLOAT is 1
make: *** No targets.  Stop.

$(info ..)打印的HFLOAT值在两种情况下都是正确的,但ifeq ($(HFLOAT), 1)似乎将# comment作为$(HFLOAT)的一部分。怎么了?

1 个答案:

答案 0 :(得分:4)

来自GNU make manual:

  

...如果你不希望在你的结尾有任何空格字符   变量值,你必须记住不要随意评论   一些空白之后的行尾......

由于您的评论,HFLOAT的值为1,后跟一个空格字符。这是因为指定的值是=符号的所有内容,前导空格已剥离,最多为#(已排除)。您的ifeq测试因此失败。没有评论,更重要,没有尾随空格,HFLOAT的值为1(只有一个),测试通过。

请注意:

HFLOAT = 1  # comment

HFLOAT的值为1,后跟两个空格。还要注意,如果没有评论,可能很难发现尾随空格但仍然存在。使用(使用鼠标选择行并查看尾随空格):

HFLOAT = 1  

HFLOAT的值也是1,后跟两个空格。使用ifeq等条件时,通常也可以使用strip删除前导和尾随空格:

ifeq ($(strip $(HFLOAT)),1)