When it is time to execute commands to update a target, they are executed
by making a new subshell for each line. (In practice,
take shortcuts that do not affect the results.)
Please note: this implies that shell commands such as
cd that set variables local to each process will not affect the
following command lines. If you want to use
cd to affect the
next command, put the two on a single line with a semicolon between
make will consider them a single command and pass
them, together, to a shell which will execute them in sequence. For
foo : bar/lose cd bar; gobble lose > ../foo
If you would like to split a single shell command into multiple lines of text, you must use a backslash at the end of all but the last subline. Such a sequence of lines is combined into a single line, by deleting the backslash-newline sequences, before passing it to the shell. Thus, the following is equivalent to the preceding example:
foo : bar/lose cd bar; \ gobble lose > ../foo
The program used as the shell is taken from the variable
By default, the program `/bin/sh' is used.
Unlike most variables, the variable
SHELL is never set from the
environment. This is because the
SHELL environment variable is
used to specify your personal choice of shell program for interactive
use. It would be very bad for personal choices like this to affect
the functioning of makefiles. See section Variables from the Environment.
Go to the first, previous, next, last section, table of contents.