Contents|Index|Previous|Next

Command Execution

When it is time to execute commands to update a target, they are executed by making a new subshell for each line. (In practice, make may take shortcuts that do not affect the results.)

Note:
The implication that shell commands such as cd 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 them. Then make will consider them a single command and pass them, together, to a shell which will execute them in sequence. Use the following example for clarification.

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, SHELL. By default, the program ‘/bin/sh’ is used.

Unlike most variables, 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 Variables from the Environment.