RE: Question WHY is gnu make does not stop on error on rule

"Cook, Malcolm" <[email protected]>
Newsgroups gmane.comp.gnu.make.general
Message-ID <DS7PR20MB46715E38BEF410CD2979B651BE1D9@DS7PR20MB4671.namprd20.prod.outlook.com>
> On Thu, 2022-12-08 at 19:59 +0100, aotto wrote:
> > HA HA HA - I fund the bug !!
> >
> > I used "-silent" and not "--silent", the "-silent" is parsed as
> 
> That's funny, but I'm not sure why it works differently in 4.4 since that was
> still the case in 4.3, if you use "-silent".
> 
> > MqC.mq.$(MAKE_LNG): | MqC.mq.$(MAKE_LNG).before
> > MqC.mq.$(MAKE_LNG).after
> 
> This usage is dangerous, because:
> 
>   $ false
>   $ echo $?
>   1
> 
>   $ false | cat
>   $ echo $?
>   0
> 
> See how the pipeline swallowed the failing exit code?  The exit code of a
> pipeline is always the exit code of the last statement in the pipeline (here, the
> "cat" program).
> 
> If you want to require bash you can use something like:
> 
>   SHELL := /bin/bash
>   .SHELLFLAGS = -o pipefail -c
> 
> which will force the exit code of a pipeline to be the exit code of the last
> failing command, not the last command.

I'd add that if you're doing this you'll want to use

 .ONESHELL:

to ensure that multiple lines of a recipe execute one after each other in the same process.

> 
> If you don't want to require bash, you'll have to get a LOT fancier than simply
> adding a pipe in a variable, if you want to preserve exit codes.
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.