
每當我提到任何版本以及此 makefile 的執行命令時,該版本都應儲存在變數 VERSION 中,如果未提及版本,則應採用預設值。
這是我的 Makefile
export $(BUILDVERSION) = $2
VERS = VABCDE.00.00A002
$(info BUILDVERSION is "$(BUILDVERSION)")
$(info vers is "$(VERS)")
ifneq ($(BUILDVERSION),undefined)
VERSION := $(VERS)
endif
ifneq ($(BUILDVERSION),undefined)
VERSION := $(BUILDVERSION)
endif
$(info VERSION is $(VERSION))
情況 1:當我包含執行參數時,我得到此輸出
BUILDVERSION is "VABCDE.00.00A001"
vers is VABCDE.00.00A002
VERSION is "VABCDE.00.00A001"
情況 2:當我不包含執行參數時,出現此錯誤
Makefile:1: *** empty variable name. Stop.
Makefile:1: *** empty variable name. Stop.
誰能幫我找出我的程式碼有什麼問題!
答案1
我不確定,我理解這個問題。
如果您的任務是從外部提供版本號make
,並在命令列中未提供版本時使用預設值。那麼makefile
應該看起來像這樣:
VERS = VABCDE.00.00A002
$(info BUILDVERSION is "$(BUILDVERSION)")
$(info vers is "$(VERS)")
ifdef BUILDVERSION
VERSION := $(BUILDVERSION)
else
VERSION := $(VERS)
endif
$(info VERSION is $(VERSION))
你可以這樣稱呼它:
make BUILDVERSION="not-default-version"
答案2
export $(BUILDVERSION) = $2
太長;博士; GNU make 不是 bash。
如果您呼叫as ,則只會$(BUILDVERSION)
擴展為任何內容,這將導致該行 a) 定義為make
make BUILDVERSION=something
something
類似函數的宏當用作 時,它將擴展為其第二個參數$(call something, ...)
,並且 b) 導出空的something
命名為從 make 規則執行的命令的環境變數。
如果BUILDVERSION
未定義或定義為空字串,您將收到該empty variable name
錯誤。
$ make -f - <<'EOT' BUILDVERSION=something
export $(BUILDVERSION) = $2
all:; set | grep ^something; echo XXX $(call something,first,second)
EOT
set | grep ^something; echo XXX second
something=''
XXX second
$2
做不是展開為 make 命令列上傳遞的第二個參數,因為 ... make 不是 bash。