Makefile 目标意外引发错误

Makefile target unexpectadly raising error

我的 Makefile 包括跟随目标

   run: $(BIN_FILE)
        if [ -d $(BIN_FILE) ]; then $(error Sorry BIN_FILE is directory); else ./$(BIN_FILE) $(RUN_ARGS); fi

但是无论测试通过与否,它都会引发错误。怎么了?为什么即使 BIN_FILE 不是目录也会引发错误?指令 $(error... 有什么特殊含义吗?

非常感谢。

您不能在 shell 脚本中嵌入这样的 Make 表达式。 Make 在 shell 开始之前执行 $(...) 表达式的所有扩展,因此它会看到您的 $(error ...) 命令并退出。您需要使用 shell 逻辑来发出此错误,执行类似以下操作:

run: $(BIN_FILE)
    if [ -d $(BIN_FILE) ]; then \
        echo "Sorry BIN_FILE is directory"; \
        exit 1; \
    fi
    $(BIN_FILE) $(RUN_ARGS)

或者逻辑稍微紧凑一点:

run: $(BIN_FILE)
    [ -d "$(BIN_FILE)" ] && { echo "$(BIN_FILE) is a directory"; exit 1; } ||:
    $(BIN_FILE) $(RUN_ARGS)