即使在 If 块中,Makefile 也会抛出错误

Makefile Throws Error Even When In If Block

我有一个验证函数,我想在验证失败时抛出错误。这是我使用的代码:

define validate
    if [ condition... ]; then \
        echo "ERROR"; \
        $(error Validation failed); \
    fi; \
    echo "NOERROR";
endef

我遇到的问题是,即使条件为假,错误仍然会被抛出。当我删除错误和 运行 函数时,我可以看到 echo 'ERROR' 没有显示。

为什么会这样?

那是因为 $(error) 是一个 make 函数,并且在将所有此语句传递给 shell 之前对其进行评估。如果您想从 shell 开始失败,只需使用 exit 1 即可。