(make.info.gz) Execution

Info Catalog (make.info.gz) Echoing (make.info.gz) Recipes (make.info.gz) Parallel
 
 5.3 Recipe Execution
 ====================
 
 When it is time to execute recipes to update a target, they are
 executed by invoking a new subshell for each line of the recipe, unless
 the `.ONESHELL' special target is in effect ( 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 $(@D) && gobble $(@F) > ../$@
 
 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.
 
Info Catalog (make.info.gz) Echoing (make.info.gz) Recipes (make.info.gz) Parallel
automatically generated by info2html