代码之家  ›  专栏  ›  技术社区  ›  GreenMatt

如何让GNU明确测试失败?

  •  62
  • GreenMatt  · 技术社区  · 15 年前

    在多年不使用make之后,我发现自己又需要它了,现在是GNU版本。我很确定我应该能做我想做的事情,但我还没弄明白怎么做,也没用谷歌找到答案,等等。

    我正在尝试创建一个测试目标,它将多次执行我的程序,并将结果保存在日志文件中。有些测试会导致程序中止。不幸的是,我的makefile在第一个测试中中止,这会导致一个错误。我有点像:

    # Makefile
    # 
    test:
            myProg -h > test.log              # Display help
            myProg good_input >> test.log     # should run fine
            myProg bad_input1 >> test.log      # Error 1
            myProg bad_input2 >> test.log      # Error 2
    

    有了以上这些,在坏的输入1运行后退出,永远不会进入坏的输入2运行。

    3 回复  |  直到 10 年前
        1
  •  16
  •   tripleee    11 年前

    如果您希望要求目标失败,正确的解决方案是否定其退出代码。

    # Makefile
    # 
    test:
        myProg -h > test.log              # Display help
        myProg good_input >> test.log     # should run fine
        ! myProg bad_input1 >> test.log      # Error 1
        ! myProg bad_input2 >> test.log      # Error 2
    

    现在,在这两种情况下成功是一个错误。

        2
  •  120
  •   please delete me    15 年前

    放一个 - 命令前,例如:

    -myProg bad_input >> test.log
    

    GNUmake随后将忽略进程退出代码。

        3
  •  30
  •   Rob Wells    11 年前

    试着把它当作

    make -i
    

    make --ignore-errors
    

    忽略所有错误 全部的 规则。

    我也建议把它作为

    make -i 2>&1 | tee results
    

    这样你就得到了所有的错误和输出来看看发生了什么。

    在错误发生后盲目地继续下去可能不是你真正想要做的。make实用程序的本质是,通常依赖于成功完成以前的命令,这样它就可以使用这些命令的人工制品作为以后执行命令的先决条件。

    顺便说一句 高度地 建议获取 the O'Reilly book on make . 第一版对make的基本特性有一个极好的概述,特别是它的向后链接行为。后来的版本仍然很好,但第一版仍然对实际发生的事情有最清楚的解释。事实上,我自己的副本是我传递给那些来问我“wtf”的人的第一件事。关于make的问题!(-)