2016-12-13 26 views
2

我現在正在尋找一整小時的問題... 爲什麼它不是IS 0makefile:ifeq - 有什麼不對?

我不是一個大製作大師。

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製作4.0。

回答

3

空格是被比較字符串的一部分。它看起來像在某處有一個額外的空間,可能是JAVAC:=賦值中的最後一個字符。

爲了檢驗這一假設,使用

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

沒有,沒有工作。還是一樣的結果。 – chris01

+0

明白了。 EOL的愚蠢空間。謝謝! – chris01

+0

@chris我編輯了我的答案,現在提出了一個不同的解決方案。我可以通過在'JAVAC:= ... '中添加空白來重現您的觀察。 – Jens

0

編寫你比較像......

ifeq ($(JAVAC), 0) 

...是這樣的方式比較:

ifeq "$(JAVAC)" " 0" 

注意0之前的空格。


只需使用雙引號標記,以避免任何問題,或使用another valid one

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