我有这个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)的一部分。怎么了?
答案 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)