How to have GNU make explicitly test for failure?

前端 未结 3 1525
臣服心动
臣服心动 2020-12-24 00:50

After years of not using make, I find myself needing it again, the gnu version now. I\'m pretty sure I should be able to do what I want, but haven\'t figured out how, or fo

相关标签:
3条回答
  • 2020-12-24 00:57

    The proper solution if you want to require the target to fail is to negate its exit code.

    # 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
    

    Now, it is an error to succeed in those two cases.

    0 讨论(0)
  • 2020-12-24 00:58

    Put a - before the command, e.g.:

    -myProg bad_input >> test.log
    

    GNU make will then ignore the process exit code.

    0 讨论(0)
  • 2020-12-24 01:00

    Try running it as

    make -i
    

    or

    make --ignore-errors
    

    which ignores all errors in all rules.

    I'd also suggest running it as

    make -i 2>&1 | tee results
    

    so that you got all the errors and output to see what happened.

    Just blindly continuing on after an error is probably not what you're really wanting to do. The make utility, by its very nature, is usually relying on successful completion of previous commands so that it can use the artefacts of those commands as pre-requisites for commands to be executed later on.

    BTW I'd highly recommend getting a copy of the O'Reilly book on make. The first edition has an excellent overview of the basic nature of make, specifically its backward chaining behaviour. Later editions are still good but the first ed. still has the clearest explanation of what's actually happening. In fact, my own copy is the first thing I pass to people who come to me to ask "WTF? questions" about make! (-:

    0 讨论(0)
提交回复
热议问题