2016-12-01 33 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

宏是我正在尋找的。謝謝! –