Makefile 如果单元测试失败,让make失败

Makefile 如果单元测试失败,让make失败,makefile,return-value,gnu-make,Makefile,Return Value,Gnu Make,我有一个编译静态库的makefile。此生成文件具有编译与静态库关联的单元测试套件的规则。编译测试套件后,将调用python脚本来运行测试并记录结果。看起来是这样的: unit: $(MAKE) -C cXbase/unit python $(TESTS_RUNNER) $(UNIT_TESTS_EXEC) $(UNIT_TESTS_LOG) 我使用Python使测试调用可移植。现在,一切正常:测试编译,调用测试运行程序,并在Linux和Windows中正确记录所有内容。只是,

我有一个编译静态库的makefile。此生成文件具有编译与静态库关联的单元测试套件的规则。编译测试套件后,将调用python脚本来运行测试并记录结果。看起来是这样的:

unit:
    $(MAKE) -C cXbase/unit
    python $(TESTS_RUNNER) $(UNIT_TESTS_EXEC) $(UNIT_TESTS_LOG)
我使用Python使测试调用可移植。现在,一切正常:测试编译,调用测试运行程序,并在Linux和Windows中正确记录所有内容。只是,当测试失败时,我想停止整个make过程并返回一个错误。更准确地说,当单元测试失败(或多次失败)时,我不希望
生成所有
生成单元

如果单元测试失败,Python脚本将返回特定的退出代码。我希望能够以一种可移植的方式捕获它,并且如果捕获了退出代码,则使其失败

你对如何做到这一点有什么建议吗?我在别处找不到令人信服或可移植的东西


谢谢

看来解决方案比我想象的要简单得多。python退出代码直接反映在它的退出代码中。换句话说,如果脚本失败(退出代码不是0),
make
将此视为命令错误并停止

在测试失败时,我的Python脚本退出代码处理中有一个错误,这对我来说是隐藏的。现在它被解决了,并且工作得很好


我在这里发现了这一点:

您是在谈论返回值还是退出代码?如果配方中的命令给出非零退出状态,Make将中止。如果这还不够好,我们必须在命令中捕获退出状态,问题是“可移植性有多强?”我知道如何在bash中捕获和测试它;你对其他shell感兴趣吗?@Beta我希望它在bash和cmd(Windows)中工作,如果退出状态不是特殊值,你想要什么?@Beta然后
make
可以像往常一样继续,所有测试都通过了。