如果 Makefile 中的条件未评估

If condition in Makefile not evaluating

我的 Makefile 中有一个简单的 if 条件,用于构建基于平台的 Docker 图像(如果在 arm64 上使用 docker buildx),但它没有评估,我我很困惑为什么不是。有什么建议么?谢谢!

...

OS_ARCH := $(shell /usr/bin/arch)

build:
    @echo "Building for ${OS_ARCH}"
ifeq ($(OS_ARCH),"arm64")
    @echo "Building for ARM64"
    @docker buildx build -t $(NAMESPACE)/$(IMAGE_NAME):$(VERSION) --platform $(PLATFORM) -f ./$(DOCKERFILE) --no-cache=$(NO_CACHE) --label "git-revison=$(git rev-parse HEAD)" --label "version=$(VERSION)" .
else
    @echo "Building for x86_64"
    @docker build -t $(NAMESPACE)/$(IMAGE_NAME):$(VERSION) -f ./$(DOCKERFILE) --no-cache=$(NO_CACHE) --label "git-revison=$(git rev-parse HEAD)" --label "version=$(VERSION)" .
endif
    @echo 'Done building.'
    @docker images --format '{{.Repository}}:{{.Tag}}\t\t Built: {{.CreatedSince}}\t\tSize: {{.Size}}' | grep $(IMAGE_NAME):$(VERSION)
    @echo "Finished building $(IMAGE_NAME):$(VERSION)"

您有:

ifeq ($(OS_ARCH),"arm64")

如果 OS_ARCH 设置为 arm64,则计算结果为:

ifeq (arm64,"arm64")

并且字符串 arm64 与字符串 "arm64" 不同,因为后者有引号而前者没有。

使用:

ifeq ($(OS_ARCH),arm64)