如何避免Makefile中出現空變數名錯誤

如何避免Makefile中出現空變數名錯誤

每當我提到任何版本以及此 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) 定義為makemake BUILDVERSION=somethingsomething類似函數的宏當用作 時,它將擴展為其第二個參數$(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。

相關內容