from make.texinfo on 11 July 1994 -->
Go to the previous, next section.
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.
Also, any arguments that define variable values are added to MAKE,
so the sub-make gets them too. Thus, if you do `make
CFLAGS=-O', so that all C compilations will be optimized, the
sub-make is run with `cd subdir; /bin/make CFLAGS=-O'.
The MAKE variable actually just refers to two other variables
which contain these special values. In fact, MAKE is always
defined as `$(MAKE_COMMAND) $(MAKEOVERRIDES)'. The variable
MAKE_COMMAND is the file name with which make was invoked
(such as `/bin/make', above). The variable MAKEOVERRIDES
contains definitions for the variables defined on the command line; in
the above example, its value is `CFLAGS=-O'. If you do not
want these variable definitions done in all recursive make
invocations, you can redefine the MAKEOVERRIDES variable to
remove them. You do this in any of the normal ways for defining
variables: in a makefile (see section Setting Variables); on the command
line with an argument like `MAKEOVERRIDES='
(see section Overriding Variables); or with an environment variable
(see section Variables from the Environment).
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. See section 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 section Instead of Executing the Commands.) 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
(see section Communicating Options to a Sub-make}), so your request to touch the files, or print the
commands, is propagated to the subsystem.
Go to the previous, next section.