调用makefile - 处理异常

时间:2013-10-24 18:48:17

标签: exception-handling makefile

我意识到当我从主makefile运行makefile时,如果它们的子makefile失败,则父进程继续并且不返回错误退出代码。 我试图添加异常处理......但它不起作用。有什么想法吗?

MAKE_FILES := $(wildcard test_*.mak)
compile_tests:
        @echo "Compiling tests.$(MAKE_FILES)."
        @for m in $(MAKE_FILES); do\
                $(MAKE) -f "$$m"; || $(error Failed to compile $$m)\
        done

1 个答案:

答案 0 :(得分:1)

你不能在配方中使用像$(error ...)这样的make函数,因为在调用shell之前,所有make变量和函数都先扩展 。因此,当make尝试运行该配方时,错误功能将立即发生。

你必须使用shell构造失败,而不是构造;类似的东西:

compile_tests:
        @echo "Compiling tests.$(MAKE_FILES)."
        @for m in $(MAKE_FILES); do \
                $(MAKE) -f "$$m" && continue; \
                echo Failed to compile $$m; \
                exit 1
        done

然而,即使这不是很好,因为如果你使用-k,它仍会立即停止。更好的是利用制作得很好的东西,这是很多东西:

compile_tests: $(addprefix tests.$(MAKE_FILES))
$(addprefix tests.$(MAKE_FILES)): tests.%:
        $(MAKE) -f "$*"

注意,如果您启用-j,这些将全部并行运行。不确定这对你是否合适。