MAKE Variable WorksRecursive 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. See 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
(see Communicating Options to a Sub-make), so your request to touch the files, or print the
commands, is propagated to the subsystem.