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.