在Makefile中,ifeq似乎看到一个变量与设置值后面的注释组合在一起

在Makefile中,ifeq似乎看到一个变量与设置值后面的注释组合在一起,makefile,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中删除上面的注释,并使用rut make,我会得到 id@host:~

我有这个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中删除上面的注释,并使用rut make,我会得到

id@host:~/test] make
1
HFLOAT is 1
make: *** No targets.  Stop.
$info。。打印的HFLOAT值在这两种情况下都是正确的,但是如果eq$HFLOAT,1似乎将注释作为$HFLOAT的一部分。怎么了

来自GNU make手册:

…如果您不希望在文件末尾有任何空白字符 变量值时,必须记住不要在 在一些空格后结束行

由于您的注释,HFLOAT的值为1,后跟一个空格字符。这是因为指定的值在=符号、前导空格和排除之前都是正确的。因此,您的ifeq测试失败。没有注释,更重要的是,没有尾随空格,HFLOAT的值为1,只有一个,测试通过

请注意:

HFLOAT = 1  # comment
HFLOAT的值为1,后跟两个空格。还请注意,如果没有注释,尾随空格可能很难找到,但仍然存在。使用鼠标选择线并查看尾随空格:

HFLOAT = 1  
ifeq ($(strip $(HFLOAT)),1)
HFLOAT的值也是1,后跟两个空格。当使用诸如ifeq之类的条件时,通常明智的做法是同时使用strip删除前导空格和尾随空格:

HFLOAT = 1  
ifeq ($(strip $(HFLOAT)),1)
从GNU make手册:

…如果您不希望在文件末尾有任何空白字符 变量值时,必须记住不要在 在一些空格后结束行

由于您的注释,HFLOAT的值为1,后跟一个空格字符。这是因为指定的值在=符号、前导空格和排除之前都是正确的。因此,您的ifeq测试失败。没有注释,更重要的是,没有尾随空格,HFLOAT的值为1,只有一个,测试通过

请注意:

HFLOAT = 1  # comment
HFLOAT的值为1,后跟两个空格。还请注意,如果没有注释,尾随空格可能很难找到,但仍然存在。使用鼠标选择线并查看尾随空格:

HFLOAT = 1  
ifeq ($(strip $(HFLOAT)),1)
HFLOAT的值也是1,后跟两个空格。当使用诸如ifeq之类的条件时,通常明智的做法是同时使用strip删除前导空格和尾随空格:

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

哇,谢谢你善意的解释!我没有意识到那件重要的事。哇,谢谢你善意的解释!我没有意识到那件重要的事。