Makefile - 没有这样的文件或目录错误

rob*_*e70 5 make

我正在尝试创建一个 Makefile 目标,它首先检查我的 Docker 容器是否存在。如果它存在,那么我想发出 Docker Container Restart 命令,否则我想发出 Docker Run 命令来创建和启动容器。

我已对以下内容进行编码,但出现如下所示的错误。结果 = 1 是正确的,因为我确实有一个容器正在运行。我已经移除了容器并测试结果变为 0,这也是正确的。问题似乎是当我尝试在ifeq语句中使用结果时。有人可以告诉我我做错了什么吗?(我在调试时暂时注释掉了 docker 命令并用 echo true / false 替换了它们)。

start_docker_myapp:
    result = $(shell (docker ps -a | grep myapp ) | wc -l )
    ifeq (${result}, 1)
        @echo 'true'
# docker restart ${IMAGE}
    else
        @echo 'false'
# docker run -v ${DIR}/var/log/docker:/var/log/myapp -p 1812:1812/udp  -p 1813:1813/udp --detach  --name ${IMAGE} $(REGISTRY)/$(IMAGE):$(TAG)
    endif
Run Code Online (Sandbox Code Playgroud)

终端输出

$ make start_docker_myapp
result =        1
make: result: No such file or directory
make: *** [start_docker_myapp] Error 1
$
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 4

您的 Makefile 存在许多问题(除了 Makefile 是否是适当的解决方案的问题之外):

\n\n
    \n
  • 条件指令是配方的一部分,因此它们必须以制表符开头;
  • \n
  • 条件指令在读取 Makefile 时进行评估,因此必须事先分配变量并且可以\xe2\x80\x99t 是特定于目标的;
  • \n
  • docker ps -a返回所有已知容器的信息,包括非运行容器;
  • \n
  • 虚假目标应如此声明。
  • \n
\n\n

以下作品:

\n\n
result = $(shell docker ps -f name=myapp -q | wc -l)\nstart_docker_myapp:\nifeq ($(strip $(result)),1)\n    @echo true\nelse\n    @echo false\nendif\n\n.PHONY: start_docker_myapp\n
Run Code Online (Sandbox Code Playgroud)\n