f78
How the MAKE Variable Works
Contents|Index|Previous|Next
How the MAKE Variable Works
Recursive make commands should always use the variable, MAKE, not the explicit command name, ‘make’, as shown in the following example.
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’) options. 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’ for example. (The ‘-t’ option marks targets as up to date without actually running any commands; Instead of Executing the Commands.) Following the usual definition of ‘-t’, a ‘make -t’ command would create a file named ‘subsystem’ and d
6e9
o nothing else.
What you really want it to do is run ‘
cd subdir; make -t’ although that would require executing the command, and ‘-t’ says not to execute commands.
The special feature makes this do what you want: whenever a com-mand 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 exe-cuted 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 that your request to touch the files, or print the commands, is
propagated to the subsystem.
0