就這個問題而言,通過條件變量賦值我的意思是?=
運算符和標準賦值我的意思是:=
運算符。爲什麼條件變量賦值會設置一個值,但標準賦值不會?
我想通過將它分配給一個變量來檢查命令是否存在,然後使用ifdef
來檢查它,但是我看到了不同的行爲,這取決於我用來執行初始分配的兩個運算符中的哪一個。
這是一個蒸餾的Makefile示例。請注意,我的系統上不存在foo
和bar
,因此我希望這兩種檢查都會觸發「未找到」分支。
FOO := $(shell which foo)
BAR ?= $(shell which bar)
all:
ifdef FOO
echo "FOO found with value '${FOO}'"
else
echo "FOO not found"
endif
ifdef BAR
echo "BAR found with value '${BAR}'"
else
echo "BAR not found"
endif
當我運行make
,我得到這樣的結果:
FOO not found
BAR found with value ''
的GNU make documentation說ifdef
尋找一個非空值。
爲什麼這兩個賦值運算符在行爲和它們產生的不同?
這是偉大的。感謝您的解釋。我認爲我只遇到過簡單的擴展變量,之前這就是爲什麼這種行爲讓我困惑。 –