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

File: make.info,  Node: MAKE Variable,  Next: Recursion.php">Recursion.php">Variables/Recursion.php">Recursion,  Prev: Recursion.php">Recursion,  Up: Recursion.php">Recursion

5.7.1 How the 'MAKE' Variable Works
-----------------------------------

Recursive 'make' commands should always use the variable 'MAKE', not the
explicit command name 'make', as shown here:

     subsystem:
             cd subdir && $(MAKE)

   The value of this variable is the file name with which 'make' was
invoked.  If this file name was '/bin/make', then the recipe executed is
'cd subdir && /bin/make'.  If you use a special version of 'make' to run
the top-level makefile, the same special version will be executed for
recursive invocations.

   As a special feature, using the variable 'MAKE' in the recipe of a
rule alters the effects of the '-t' ('--touch'), '-n' ('--just-print'),
or '-q' ('--question') option.  Using the 'MAKE' variable has the same
effect as using a '+' character at the beginning of the recipe line.
*Note Instead of Executing the Recipes: Instead of Execution.  This
special feature is only enabled if the 'MAKE' variable appears directly
in the recipe: it does not apply if the 'MAKE' variable is referenced
through expansion of another variable.  In the latter case you must use
the '+' token to get these special effects.

   Consider the command 'make -t' in the above example.  (The '-t'
option marks targets as up to date without actually running any recipes;
see *note Instead of Execution::.)  Following the usual definition of
'-t', a 'make -t' command in the example would create a file named
'subsystem' and do nothing else.  What you really want it to do is run
'cd subdir && make -t'; but that would require executing the recipe, and
'-t' says not to execute recipes.

   The special feature makes this do what you want: whenever a recipe
line of a rule contains the variable 'MAKE', the flags '-t', '-n' and
'-q' do not apply to that line.  Recipe lines containing 'MAKE' are
executed normally despite the presence of a flag that causes most
recipes not to be run.  The usual 'MAKEFLAGS' mechanism passes the flags
to the sub-'make' (*note Communicating Options to a Sub-'make':
Options/Recursion.), so your request to touch the files, or print the
recipes, is propagated to the subsystem.

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