mirror of
https://salsa.debian.org/srivasta/make-dfsg.git
synced 2025-02-07 04:55:46 +00:00
Doc .DELETE_ON_ERROR.
Doc new MAKEFLAGS/MAKEOVERRIDES. Doc .IGNORE/.SILENT with deps.
This commit is contained in:
parent
8ad5af7c28
commit
eac1e9ee66
1 changed files with 94 additions and 50 deletions
144
make.texinfo
144
make.texinfo
|
@ -10,8 +10,8 @@
|
||||||
@set RCSID $Id$
|
@set RCSID $Id$
|
||||||
@set EDITION 0.47 DRAFT
|
@set EDITION 0.47 DRAFT
|
||||||
@set VERSION 3.72 Beta
|
@set VERSION 3.72 Beta
|
||||||
@set UPDATED 24 October 1994
|
@set UPDATED 1 November 1994
|
||||||
@set UPDATE-MONTH October 1994
|
@set UPDATE-MONTH November 1994
|
||||||
@set ISBN 1-882114-50-7
|
@set ISBN 1-882114-50-7
|
||||||
|
|
||||||
@c finalout
|
@c finalout
|
||||||
|
@ -2141,24 +2141,28 @@ match that file's name.
|
||||||
@findex .IGNORE
|
@findex .IGNORE
|
||||||
@item .IGNORE
|
@item .IGNORE
|
||||||
|
|
||||||
Simply by being mentioned as a target, @code{.IGNORE} says to ignore
|
If you specify dependencies for @code{.IGNORE}, then @code{make} will
|
||||||
errors in execution of commands. The dependencies and commands for
|
ignore errors in execution of the commands run for those particular
|
||||||
@code{.IGNORE} are not meaningful.
|
files. The commands for @code{.IGNORE} are not meaningful.
|
||||||
|
|
||||||
@samp{.IGNORE} exists for historical compatibility. Since
|
If mentioned as a target with no dependencies, @code{.IGNORE} says to
|
||||||
@code{.IGNORE} affects every command in the makefile, it is not very
|
ignore errors in execution of commands for all files. This usage of
|
||||||
useful; we recommend you use the more selective ways to ignore errors
|
@samp{.IGNORE} is supported only for historical compatibility. Since
|
||||||
in specific commands. @xref{Errors, ,Errors in Commands}.
|
this affects every command in the makefile, it is not very useful; we
|
||||||
|
recommend you use the more selective ways to ignore errors in specific
|
||||||
|
commands. @xref{Errors, ,Errors in Commands}.
|
||||||
|
|
||||||
@findex .SILENT
|
@findex .SILENT
|
||||||
@item .SILENT
|
@item .SILENT
|
||||||
|
|
||||||
Simply by being mentioned as a target, @code{.SILENT} says not to
|
If you specify dependencies for @code{.SILENT}, then @code{make} will
|
||||||
print commands before executing them. The dependencies and commands
|
not the print commands to remake those particular files before executing
|
||||||
for @code{.SILENT} are not meaningful.
|
them. The commands for @code{.SILENT} are not meaningful.
|
||||||
|
|
||||||
@samp{.SILENT} exists for historical compatibility. We recommend you
|
If mentioned as a target with no dependencies, @code{.SILENT} says not
|
||||||
use the more selective ways to silence specific commands.
|
to print any commands before executing them. This usage of
|
||||||
|
@samp{.SILENT} is supported only for historical compatibility. We
|
||||||
|
recommend you use the more selective ways to silence specific commands.
|
||||||
@xref{Echoing, ,Command Echoing}. If you want to silence all commands
|
@xref{Echoing, ,Command Echoing}. If you want to silence all commands
|
||||||
for a particular run of @code{make}, use the @samp{-s} or
|
for a particular run of @code{make}, use the @samp{-s} or
|
||||||
@w{@samp{--silent}} option (@pxref{Options Summary}).
|
@w{@samp{--silent}} option (@pxref{Options Summary}).
|
||||||
|
@ -2721,7 +2725,7 @@ actually doing them.
|
||||||
The @samp{-s} or @samp{--silent}
|
The @samp{-s} or @samp{--silent}
|
||||||
flag to @code{make} prevents all echoing, as if all commands
|
flag to @code{make} prevents all echoing, as if all commands
|
||||||
started with @samp{@@}. A rule in the makefile for the special target
|
started with @samp{@@}. A rule in the makefile for the special target
|
||||||
@code{.SILENT} has the same effect
|
@code{.SILENT} without dependencies has the same effect
|
||||||
(@pxref{Special Targets, ,Special Built-in Target Names}).
|
(@pxref{Special Targets, ,Special Built-in Target Names}).
|
||||||
@code{.SILENT} is essentially obsolete since @samp{@@} is more flexible.@refill
|
@code{.SILENT} is essentially obsolete since @samp{@@} is more flexible.@refill
|
||||||
|
|
||||||
|
@ -2910,10 +2914,10 @@ This causes @code{rm} to continue even if it is unable to remove a file.
|
||||||
@cindex @code{--ignore-errors}
|
@cindex @code{--ignore-errors}
|
||||||
@findex .IGNORE
|
@findex .IGNORE
|
||||||
When you run @code{make} with the @samp{-i} or @samp{--ignore-errors}
|
When you run @code{make} with the @samp{-i} or @samp{--ignore-errors}
|
||||||
flag, errors are ignored in
|
flag, errors are ignored in all commands of all rules. A rule in the
|
||||||
all commands of all rules. A rule in the makefile for the special target
|
makefile for the special target @code{.IGNORE} has the same effect, if
|
||||||
@code{.IGNORE} has the same effect. These ways of ignoring errors are
|
there are no dependencies. These ways of ignoring errors are obsolete
|
||||||
obsolete because @samp{-} is more flexible.
|
because @samp{-} is more flexible.
|
||||||
|
|
||||||
When errors are to be ignored, because of either a @samp{-} or the
|
When errors are to be ignored, because of either a @samp{-} or the
|
||||||
@samp{-i} flag, @code{make} treats an error return just like success,
|
@samp{-i} flag, @code{make} treats an error return just like success,
|
||||||
|
@ -2926,6 +2930,7 @@ can any other that depends on it either directly or indirectly. No further
|
||||||
commands will be executed for these targets, since their preconditions
|
commands will be executed for these targets, since their preconditions
|
||||||
have not been achieved.
|
have not been achieved.
|
||||||
|
|
||||||
|
|
||||||
@cindex @code{-k}
|
@cindex @code{-k}
|
||||||
@cindex @code{--keep-going}
|
@cindex @code{--keep-going}
|
||||||
Normally @code{make} gives up immediately in this circumstance, returning a
|
Normally @code{make} gives up immediately in this circumstance, returning a
|
||||||
|
@ -2947,11 +2952,28 @@ is why Emacs' @code{compile} command passes the @samp{-k} flag by
|
||||||
default.
|
default.
|
||||||
@cindex Emacs (@code{M-x compile})
|
@cindex Emacs (@code{M-x compile})
|
||||||
|
|
||||||
|
@findex .DELETE_ON_ERROR
|
||||||
|
@cindex deletion of target files
|
||||||
|
@cindex removal of target files
|
||||||
|
@cindex target, deleting on error
|
||||||
|
Usually when a command fails, if it has changed the target file at all,
|
||||||
|
the file is corrupted and cannot be used---or at least it is not
|
||||||
|
completely updated. Yet the file's timestamp says that it is now up to
|
||||||
|
date, so the next time @code{make} runs, it will not try to update that
|
||||||
|
file. The situation is just the same as when the command is killed by a
|
||||||
|
signal; @pxref{Interrupts}. So generally the right thing to do is to
|
||||||
|
delete the target file if the command fails after beginning to change
|
||||||
|
the file. @code{make} will do this if @code{.DELETE_ON_ERROR} appears
|
||||||
|
as a target. This is almost always what you want @code{make} to do, but
|
||||||
|
it is not historical practice; so for compatibility, you must explicitly
|
||||||
|
request it.
|
||||||
|
|
||||||
@node Interrupts, Recursion, Errors, Commands
|
@node Interrupts, Recursion, Errors, Commands
|
||||||
@section Interrupting or Killing @code{make}
|
@section Interrupting or Killing @code{make}
|
||||||
@cindex interrupt
|
@cindex interrupt
|
||||||
@cindex signal
|
@cindex signal
|
||||||
@cindex deletion of target files
|
@cindex deletion of target files
|
||||||
|
@cindex removal of target files
|
||||||
@cindex target, deleting on interrupt
|
@cindex target, deleting on interrupt
|
||||||
@cindex killing (interruption)
|
@cindex killing (interruption)
|
||||||
|
|
||||||
|
@ -3042,28 +3064,6 @@ is @samp{cd subdir; /bin/make}. If you use a special version of
|
||||||
executed for recursive invocations.
|
executed for recursive invocations.
|
||||||
@cindex @code{cd} (shell command)
|
@cindex @code{cd} (shell command)
|
||||||
|
|
||||||
Also, any arguments that define variable values are added to @code{MAKE},
|
|
||||||
so the sub-@code{make} gets them too. Thus, if you do @samp{make
|
|
||||||
CFLAGS=-O}, so that all C compilations will be optimized, the
|
|
||||||
sub-@code{make} is run with @samp{cd subdir; /bin/make CFLAGS=-O}.@refill
|
|
||||||
|
|
||||||
@vindex MAKE_COMMAND
|
|
||||||
@vindex MAKEOVERRIDES
|
|
||||||
The @code{MAKE} variable actually just refers to two other variables
|
|
||||||
which contain these special values. In fact, @code{MAKE} is always
|
|
||||||
defined as @samp{$(MAKE_COMMAND) $(MAKEOVERRIDES)}. The variable
|
|
||||||
@code{MAKE_COMMAND} is the file name with which @code{make} was invoked
|
|
||||||
(such as @file{/bin/make}, above). The variable @code{MAKEOVERRIDES}
|
|
||||||
contains definitions for the variables defined on the command line; in
|
|
||||||
the above example, its value is @samp{CFLAGS=-O}. If you @emph{do not}
|
|
||||||
want these variable definitions done in all recursive @code{make}
|
|
||||||
invocations, you can redefine the @code{MAKEOVERRIDES} variable to
|
|
||||||
remove them. You do this in any of the normal ways for defining
|
|
||||||
variables: in a makefile (@pxref{Setting, ,Setting Variables}); on the command
|
|
||||||
line with an argument like @samp{MAKEOVERRIDES=}
|
|
||||||
(@pxref{Overriding, ,Overriding Variables}); or with an environment variable
|
|
||||||
(@pxref{Environment, ,Variables from the Environment}).
|
|
||||||
|
|
||||||
As a special feature, using the variable @code{MAKE} in the commands of
|
As a special feature, using the variable @code{MAKE} in the commands of
|
||||||
a rule alters the effects of the @samp{-t} (@samp{--touch}), @samp{-n}
|
a rule alters the effects of the @samp{-t} (@samp{--touch}), @samp{-n}
|
||||||
(@samp{--just-print}), or @samp{-q} (@w{@samp{--question}}) option.
|
(@samp{--just-print}), or @samp{-q} (@w{@samp{--question}}) option.
|
||||||
|
@ -3106,9 +3106,9 @@ commands, is propagated to the subsystem.@refill
|
||||||
Variable values of the top-level @code{make} can be passed to the
|
Variable values of the top-level @code{make} can be passed to the
|
||||||
sub-@code{make} through the environment by explicit request. These
|
sub-@code{make} through the environment by explicit request. These
|
||||||
variables are defined in the sub-@code{make} as defaults, but do not
|
variables are defined in the sub-@code{make} as defaults, but do not
|
||||||
override what is specified in the sub-@code{make}'s makefile unless
|
override what is specified in the makefile used by the sub-@code{make}
|
||||||
you use the @samp{-e} switch
|
makefile unless you use the @samp{-e} switch (@pxref{Options Summary,
|
||||||
(@pxref{Options Summary, ,Summary of Options}).@refill
|
,Summary of Options}).@refill
|
||||||
|
|
||||||
To pass down, or @dfn{export}, a variable, @code{make} adds the variable
|
To pass down, or @dfn{export}, a variable, @code{make} adds the variable
|
||||||
and its value to the environment for running each command. The
|
and its value to the environment for running each command. The
|
||||||
|
@ -3126,6 +3126,15 @@ The special variables @code{SHELL} and @code{MAKEFLAGS} are always
|
||||||
exported (unless you unexport them).
|
exported (unless you unexport them).
|
||||||
@code{MAKEFILES} is exported if you set it to anything.
|
@code{MAKEFILES} is exported if you set it to anything.
|
||||||
|
|
||||||
|
@code{make} automatically passes down variable values that were defined
|
||||||
|
on the command line, by putting them in the @code{MAKEFLAGS} variable.
|
||||||
|
@iftex
|
||||||
|
See the next section.
|
||||||
|
@end iftext
|
||||||
|
@ifinfo
|
||||||
|
@xref{Options/Recursion}.
|
||||||
|
@end ifinfo
|
||||||
|
|
||||||
Variables are @emph{not} normally passed down if they were created by
|
Variables are @emph{not} normally passed down if they were created by
|
||||||
default by @code{make} (@pxref{Implicit Variables, ,Variables Used by
|
default by @code{make} (@pxref{Implicit Variables, ,Variables Used by
|
||||||
Implicit Rules}). The sub-@code{make} will define these for
|
Implicit Rules}). The sub-@code{make} will define these for
|
||||||
|
@ -3274,6 +3283,15 @@ in its environment. In response, it takes the flags from that value and
|
||||||
processes them as if they had been given as arguments.
|
processes them as if they had been given as arguments.
|
||||||
@xref{Options Summary, ,Summary of Options}.
|
@xref{Options Summary, ,Summary of Options}.
|
||||||
|
|
||||||
|
@cindex command line variable definitions, and recursion
|
||||||
|
@cindex variables, command line, and recursion
|
||||||
|
@cindex recursion, and command line variable definitions
|
||||||
|
Likewise variables defined on the command line are passed to the
|
||||||
|
sub-@code{make} through @code{MAKEFLAGS}. Words in the value of
|
||||||
|
@code{MAKEFLAGS} that contain @samp{=}, @code{make} treats as variable
|
||||||
|
definitions just as if they appeared on the command line.
|
||||||
|
@xref{Overriding, ,Overriding Variables}.
|
||||||
|
|
||||||
@cindex @code{-C}, and recursion
|
@cindex @code{-C}, and recursion
|
||||||
@cindex @code{-f}, and recursion
|
@cindex @code{-f}, and recursion
|
||||||
@cindex @code{-I}, and recursion
|
@cindex @code{-I}, and recursion
|
||||||
|
@ -3323,13 +3341,39 @@ subsystem:
|
||||||
cd subdir; $(MAKE) MAKEFLAGS=
|
cd subdir; $(MAKE) MAKEFLAGS=
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
@vindex MAKEOVERRIDES
|
||||||
|
The command line variable definitions really appear in the variable
|
||||||
|
@code{MAKEOVERRIDES}, and @code{MAKEFLAGS} contains a reference to this
|
||||||
|
variable. If you do want to pass flags down normally, but don't want to
|
||||||
|
pass down the command line variable definitions, you can reset
|
||||||
|
@code{MAKEOVERRIDES} to empty, like this:
|
||||||
|
|
||||||
|
@example
|
||||||
|
MAKEOVERRIDES =
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
@cindex Arg list too long
|
||||||
|
@cindex E2BIG
|
||||||
|
This is not usually useful to do. However, some systems have a small
|
||||||
|
fixed limit on the size of the environment, and putting so much
|
||||||
|
information in into the value of @code{MAKEFLAGS} can exceed it.
|
||||||
|
If you see the error message @samp{Arg list too long}, this may be the problem.
|
||||||
|
@findex .POSIX
|
||||||
|
@cindex POSIX.2
|
||||||
|
(For strict compliance with POSIX.2, changing @code{MAKEOVERRIDES} does
|
||||||
|
not affect @code{MAKEFLAGS} if the special target @samp{.POSIX} appears
|
||||||
|
in the makefile. You probably do not care about this.)
|
||||||
|
|
||||||
@vindex MFLAGS
|
@vindex MFLAGS
|
||||||
A similar variable @code{MFLAGS} exists also, for historical compatibility.
|
A similar variable @code{MFLAGS} exists also, for historical
|
||||||
It has the same value as @code{MAKEFLAGS} except that it always begins with
|
compatibility. It has the same value as @code{MAKEFLAGS} except that it
|
||||||
a hyphen unless it is empty (@code{MAKEFLAGS} begins with a hyphen only when
|
does not contain the command line variable definitions, and it always
|
||||||
it begins with an option that has no single-letter version, such as
|
begins with a hyphen unless it is empty (@code{MAKEFLAGS} begins with a
|
||||||
@samp{--warn-undefined-variables}). @code{MFLAGS} was traditionally used
|
hyphen only when it begins with an option that has no single-letter
|
||||||
explicitly in the recursive @code{make} command, like this:
|
version, such as @samp{--warn-undefined-variables}). @code{MFLAGS} was
|
||||||
|
traditionally used explicitly in the recursive @code{make} command, like
|
||||||
|
this:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
subsystem:
|
subsystem:
|
||||||
|
|
Loading…
Reference in a new issue