makefile:ifeq - 怎么了?

时间:2016-12-13 12:04:09

标签: makefile gnu-make

我现在正在寻找整整一小时的问题...... 为什么不是IS 0

我不是一个伟大的制作大师。

JAVAC := $(shell javac -version 2> /dev/null; echo $$?) 

all:
    @echo $(JAVAC)
ifeq ($(JAVAC), 0)
    @echo "IS 0"
else
    @echo "NOT 0"
endif

输出:

#> make
0
NOT 0

我正在使用GNU Make 4.0。

2 个答案:

答案 0 :(得分:3)

空格是被比较的字符串的一部分。看起来你在某个地方有一个额外的空间,可能是JAVAC上的最后一个字符:=赋值。

要测试此假设,请使用

all:
      @echo '<$(JAVAC)>'

答案 1 :(得分:0)

像这样编写你的比较......

ifeq ($(JAVAC), 0)

...就像这样比较:

ifeq "$(JAVAC)" " 0"

请注意0之前的空格。

只需使用双引号表示法即可避免任何问题,或使用another valid one

ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq "arg1" 'arg2'
ifeq 'arg1' "arg2"