manpagez: man pages & more
info make
Home | html | info | man

File: make.info,  Node: Execution,  Next: Parallel,  Prev: Echoing,  Up: Recipes

5.3 Recipe Execution
====================

When it is time to execute recipes to update a target, they are executed
by invoking a new sub-shell for each line of the recipe, unless the
'.ONESHELL' special target is in effect (*note Using One Shell: One
Shell.) (In practice, 'make' may take shortcuts that do not affect the
results.)

   *Please note:* this implies that setting shell variables and invoking
shell commands such as 'cd' that set a context local to each process
will not affect the following lines in the recipe.(1)  If you want to
use 'cd' to affect the next statement, put both statements in a single
recipe line.  Then 'make' will invoke one shell to run the entire line,
and the shell will execute the statements in sequence.  For example:

     foo : bar/lose
             cd $( ../$@

Here we use the shell AND operator ('&&') so that if the 'cd' command
fails, the script will fail without trying to invoke the 'gobble'
command in the wrong directory, which could cause problems (in this case
it would certainly cause '../foo' to be truncated, at least).

* Menu:

* One Shell::                   One shell for all lines in a recipe.
* Choosing the Shell::          How 'make' chooses the shell used
                                  to run recipes.

   ---------- Footnotes ----------

   (1) On MS-DOS, the value of current working directory is *global*, so
changing it _will_ affect the following recipe lines on those systems.

© manpagez.com 2000-2024
Individual documents may contain additional copyright information.