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)
我的 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)