Home GNU Make Manual www.imodulo.com · 2003-04-05
Imodulo

MAKE Variable

[ Up: Recursion ]
[ Previous: Recursion ][ Next: Variables/Recursion ]

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 command 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 commands 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 command line. Instead of Executing the Commands.

Consider the command make -t in the above example. (The -t option marks targets as up to date without actually running any commands; see 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 command, and -t says not to execute commands. The special feature makes this do what you want: whenever a command line of a rule contains the variable MAKE, the flags -t, -n and -q do not apply to that line. Command lines containing MAKE are executed normally despite the presence of a flag that causes most commands not to be run. The usual MAKEFLAGS mechanism passes the flags to the sub-make (Communicating Options to a Sub-make), so your request to touch the files, or print the commands, is propagated to the subsystem.