Next: Special Characters in Make Macro Names, Previous: $<
in Ordinary Make Rules, Up: Portable Make Programming [Contents][Index]
Posix 2008 requires that make
must invoke each command with
the equivalent of a ‘sh -e -c’ subshell, which causes the
subshell to exit immediately if a subsidiary simple-command fails,
although not all make
implementations have historically
followed this rule. For
example, the command ‘touch T; rm -f U’ may attempt to
remove U even if the touch
fails, although this is not
permitted with Posix make. One way to work around failures in simple
commands is to reword them so that they always succeed, e.g., ‘touch
T || :; rm -f U’.
However, even this approach can run into common bugs in BSD
implementations of the -e option of sh
and
set
(see Limitations of Shell Builtins), so if you
are worried
about porting to buggy BSD shells it may be simpler to migrate
complicated make
actions into separate scripts.