如何避免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。

相关内容