如何将Makefile中的ifeq条件判断语句改写为单行形式?
单行改写Makefile的ifeq条件赋值
没问题,我来帮你把这个多行的ifeq语句改成单行形式,分两种场景来满足你的需求:
场景1:不满足条件时设置默认值
如果希望分支不是master时,给ami_regions设置一个默认值(比如空值或者其他区域),可以用Makefile内置的$(if)函数来实现:
branch := $(shell git rev-parse --abbrev-ref HEAD) ami_regions := $(if $(filter master,$(branch)),us-west-2,us-east-1) # 把us-east-1换成""就是设为空值 show_regions: echo $(ami_regions)
这里的逻辑是:
$(filter master,$(branch))会检查当前分支是否等于master,匹配成功返回master(非空,视为真),失败返回空(视为假)$(if CONDITION,THEN_VAL,ELSE_VAL)函数会根据条件结果,返回THEN_VAL(分支是master时的us-west-2)或者ELSE_VAL(你指定的默认值)
场景2:不满足条件时保持变量未设置
如果希望只有分支是master时才定义ami_regions,否则变量完全不设置,可以结合$(if)和$(eval)函数写成单行:
branch := $(shell git rev-parse --abbrev-ref HEAD) $(if $(filter master,$(branch)),$(eval ami_regions := us-west-2)) show_regions: echo $(ami_regions)
这个写法的作用是:当条件为真时,通过$(eval)执行变量赋值语句;条件为假时不执行任何操作,ami_regions就不会被定义(此时执行echo $(ami_regions)会输出空行,因为Make会把未定义的变量展开为空)。
内容的提问来源于stack exchange,提问作者alkalinecoffee
相关产品推荐
相关产品推荐

