2016-12-01 67 views
1

我需要在我的Makefile中创建查找表/字典/映射来查找键值信息。Makefiles中的字典/地图/查找表

我一直在试图用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

我做你的代码的剪切和粘贴,和硬编码AWS_ACCOUNT_ID,它似乎工作。可能你的shell命令没有返回正确的值。 – John

回答

6

我无法解释为什么你看不到你期望的行为:我会验证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) 
+0

宏是我正在寻找的。谢谢! –