为什么我的Makefile在无执行参数时变量未正确赋值默认值?
问题根因
- Makefile不支持用
$1接收命令行直接追加的参数,给Makefile传自定义变量的标准语法是make 变量名=变量值,你的参数传递方式本身就不符合Makefile的规则。 - 你的判断逻辑存在错误:未传入BUILDVERSION时,该变量的值是空字符串,而非
undefined,因此ifneq ($(BUILDVERSION),undefined)的判断条件始终成立,会直接把空值赋值给VERSION,永远不会进入else分支。
修正后的代码
# 用origin函数判断BUILDVERSION是否来自命令行传入 ifeq ($(origin BUILDVERSION), command line) override VERSION := $(BUILDVERSION) else VERSION := VABCD.00.00A001 endif $(info BUILDVERSION is "$(BUILDVERSION)") $(info VERSION is $(VERSION))
验证效果
- 传入版本号执行:执行命令
make BUILDVERSION=VABCD.00.00A001,输出和你场景1的预期一致。 - 不传版本号执行:直接执行
make,BUILDVERSION输出为空,VERSION输出默认值VABCD.00.00A001,符合你场景2的预期。
内容的提问来源于stack exchange,提问作者user14220984
相关产品推荐
相关产品推荐

