在Makefile中嵌套ifndef

时间:2017-03-20 17:45:19

标签: makefile

在我的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

1 个答案:

答案 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

我建议the GNU Make documentation