Makefile 不接受条件

Makefile 不接受条件

我在 a 中使用以下条件语句Makefile

mytarget:
    if [ -z "${TAG1}" | -z "${TAG2}" | -z "${TAG3}" ]
        then
        echo "Need to set all tag names images
        exit 1
    fi

但是之后 ...

$ make mytarget TAG1=latest TAG2=latest TAG3=latest
if [ -z "latest" | -z "latest" | -z "latest" ]
/bin/bash: -c: line 1: syntax error: unexpected end of file
Makefile:36: recipe for target 'env' failed
make: *** [env] Error 1

答案1

您需要在每个(但最后一个)命令行的末尾有反斜杠。

make使用以下命令将每个命令行发送到单独的 shell:/bin/sh -ce "cmdline"

请注意,由于 shell 中不再有换行符,因此您可能需要在backslash newline某些命令之前添加分号,例如

target:
    if true; \
        then \
            echo true;\
    fi

反斜杠导致将make所有这些虚拟行转换为:

if true; then echo true; fi

在将其发送到 之前/bin/sh -ce cmd

相关内容