Makefile目标无法识别依赖项操作

Makefile目标无法识别依赖项操作,makefile,Makefile,我编写了这个简单的Makefile来说明我的问题 $make target 调用dep作为依赖项并提取图像 但是随后对docker image list-q$(IMG)的检查没有找到我的图像 这里发生了什么,我应该如何解决 IMG:=你好,世界 .虚假:目标 目标:环境保护署署长 ifeq($(shell docker图像列表-q$(IMG)),) echo“docker映像列表无法识别拉动” 恩迪夫 .冒牌货:副总裁 副署长: @docker pull$(IMG) 该测试不是后续测试。

我编写了这个简单的Makefile来说明我的问题

$make target
  • 调用
    dep
    作为依赖项并提取图像
  • 但是随后对
    docker image list-q$(IMG)
    的检查没有找到我的图像
这里发生了什么,我应该如何解决


IMG:=你好,世界
.虚假:目标
目标:环境保护署署长
ifeq($(shell docker图像列表-q$(IMG)),)
echo“docker映像列表无法识别拉动”
恩迪夫
.冒牌货:副总裁
副署长:
@docker pull$(IMG)
该测试不是后续测试。在执行任何规则之前,它在读取时被替换到Makefile中

您可能希望在
target
规则的命令中执行该测试:

target: dep
        if test -z "$$(docker image list -q $(IMG))"; then \
            echo "docker image list did not recognize the pull" >&2; \
            false; \
        fi
我们可以将命令更改为仅运行
docker image inspect
——如果图像存在,则返回真实状态,否则返回false:

target: dep
        if ! docker image inspect "$(IMG))" >/dev/null 2>&1; then \
            echo "docker image list did not recognize the pull" >&2; \
            false; \
        fi

非常感谢。这很有帮助。几个问题。你为什么要做
$$
?我们不应该用
[-z]
来测试它吗?我们不希望Make扩展shell命令替换-我们需要将
$
加倍以将其作为
$
传递给shell。是的,我错过了命令名
test
(或者
[
]
,如果您愿意的话)-现在已修复。