我需要在Makefile中创建一个查找表/字典/地图来查找键值信息。
我一直在尝试使用ifeq
语句来做同样的事情,但我的陈述似乎失败了:
# this gets the account id from the current user's ARN, you must have the AWS CLI and jq installed
AWS_ACCOUNT_ID:=$(shell aws iam get-user | jq -r '.User.Arn' | awk -F ':' '{print $$5;}')
# define a friendly account name for output
ifeq ($(AWS_ACCOUNT_ID), 123456)
AWS_ACCOUNT_FRIENDLY:=staging
endif
ifeq ($(AWS_ACCOUNT_ID), 789012)
AWS_ACCOUNT_FRIENDLY:=preprod
endif
ifeq ($(AWS_ACCOUNT_ID), 345678)
AWS_ACCOUNT_FRIENDLY:=production
endif
它似乎只适用于第一个值123456
,但不适用于其他值。
有没有办法在Make中定义字典/地图,只需通过帐户ID的键查找帐户友好名称?
答案 0 :(得分:9)
我无法解释为什么你没有看到你期望的行为:我会验证AWS_ACCOUNT_ID
的值是你所期望的:也许你的shell脚本没有做你想要的。尝试添加以下内容:
AWS_ACCOUNT_ID := $(shell ...)
$(info AWS_ACCOUNT_ID = '$(AWS_ACCOUNT_ID)')
看看你得到了什么。
但与您的更一般性问题相关,我更倾向于在处理此类情况时使用constructed macro names,而不是使用大量ifeq
值:
AWS_123456_FRIENDLY := staging
AWS_789012_FRIENDLY := preprod
AWS_345678_FRIENDLY := production
AWS_ACCOUNT_ID := $(shell ...)
AWS_ACCOUNT_FRIENDLY := $(AWS_$(AWS_ACCOUNT_ID)_FRIENDLY)
答案 1 :(得分:0)
构建和配置管理正逐渐成为一项编程任务。不幸的是,这样做的工具缺乏一致性和广泛的接受度。团队通常最终会滚动自己的脚本动物园来共同构建,测试和发布。如果您想避免make
带来的一些稀释以及它之外的必要辅助脚本,则可以使用gmtt来为您希望在机载{{1 }}通话:
GNUmake