Re: make vs. $(MAKE) in debian/rules
Hi,
>>"Florian" == Florian Hinzmann <f.hinzmann@public.uni-hamburg.de> writes:
Florian> Is there some special reason for calling the
Florian> binary "make" the first time and using the $(MAKE)
Florian> veriable the second time?
IMHO it should always use $(MAKE). Look at the excerpt from
the manual below that details the reasons.
Florian> BTW: What does the "-" at the beginning of the line do?
Tells make to ignore any non-zero returns from the
command. Normally make would abort on non zero (error) return
values.
manoj
--
Dyslexics of the world, untie!
Manoj Srivastava <srivasta@acm.org> <http://www.datasync.com/%7Esrivasta/>
Key C7261095 fingerprint = CB D9 F4 12 68 07 E4 05 CC 2D 27 12 1D F5 E8 6E
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.
*Note Instead of Executing the Commands: Instead of Execution.
Consider the command `make -t' in the above example. (The `-t'
option marks targets as up to date without actually running any
commands; 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
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' (*note Communicating Options to a Sub-`make':
Options/Recursion.), so your request to touch the files, or print the
commands, is propagated to the subsystem.
Reply to: