每当我提到任何版本以及此 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。