在我的Makefile中,我试图通过不同的方式在目标中以编程方式设置环境变量。但是,每个ifndef
内的每个语句似乎每次都在执行。我该如何解决这个问题?
repository:
ifndef REPOSITORY_URI
@$(eval REPOSITORY_URI := $(shell bash -c "aws --region $(REGION) ecr describe-repositories --repository-names $(APP) | jq -r '.repositories[0].repositoryUri'"))
ifndef REPOSITORY_URI
@$(eval REPOSITORY_URI := $(shell bash -c "aws --region $(REGION) ecr create-repository --repository-name $(APP) | jq -r '.repositories[0].repositoryUri'"))
ifndef REPOSITORY_URI
echo "Could not establish link to AWS Repository, please ensure your credentials are set and try again"
endif
endif
endif
答案 0 :(得分:1)
您正在尝试使用生成变量REPOSITORY_URI
来计算值
make-functions,但你错误地认为为make-variable计算一个值会调用make-target和recipe。
repository
的食谱的实际含义与什么完全不同
你认为并解释它的意思是一个很大的题外话,因为
不需要目标或配方。要做到这里的目标,请写下:
ifndef REPOSITORY_URI
REPOSITORY_URI := $(shell bash -c "aws --region $(REGION) ecr describe-repositories --repository-names $(APP) | jq -r '.repositories[0].repositoryUri'")
ifndef REPOSITORY_URI
REPOSITORY_URI := $(shell bash -c "aws --region $(REGION) ecr create-repository --repository-name $(APP) | jq -r '.repositories[0].repositoryUri'")
ifndef REPOSITORY_URI
$(error "Could not establish link to AWS Repository, please ensure your credentials are set and try again")
endif
endif
endif
在makefile中要为REPOSITORY_URI
指定值的位置
(或失败)。
这本身就构成了一个带有无目标的makefile。但大概是你 想要使用 {/ 1}} 的值一个或多个目标的配方,例如
REPOSITORY_URI