makefile - Makefile 中的 if 语句用于检测 docker 镜像是否存在,如果存在则将其删除

标签 makefile

我在 Makefile 中有一个简单的 if 语句,表示删除 docker 镜像(如果存在),但它不起作用。请注意,日志文件中图像存在,但是当我执行 make clean if 语句失败时。

NAME=program1

all: .docker-build
    docker run ${NAME} make all

.docker-build:
    docker build . -t ${NAME}
    @echo "" > .docker-build

run-%: .docker-build
    docker run ${NAME} make $*

clean:
ifeq ($(docker images -q ${NAME} 2> /dev/null), "")
    docker image rm -f ${NAME}
endif
    @rm -f .docker-build

日志(注意图像存在,但 make clean 内的 if 语句失败):

➜  dockerfile-test docker images -q program1 2> /dev/null
5ee4797b91ad
➜  dockerfile-test make clean                            
rm -f .docker-build

最佳答案

这个:

ifeq ($(docker images -q ${NAME} 2> /dev/null), "")

扩展名为docker images -q program1 2>/dev/null的make变量,该变量不存在,因此扩展为空字符串,然后将其与两个字符的字符串进行比较"" 并且它永远不会匹配。

您的意思可能是:

ifeq ($(shell docker images -q ${NAME} 2> /dev/null),)

关于makefile - Makefile 中的 if 语句用于检测 docker 镜像是否存在,如果存在则将其删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70228203/

相关文章:

build-process - ./configure 有什么用(除了检查依赖关系)

makefile - 如何定时执行 gnu make 规则?

makefile - Python 构建进入无限循环

c - 对 `log' 的 undefined reference

c - 将 makefile 迁移到 Windows 时无法识别通配符

android - 将跨平台库链接到 native Android 应用程序

c - 将头文件与 makefile : undefined reference error 链接

build-process - 使: hierarchical make file

Makefile二次扩展

c++ - 使用Cmake输出库信息