Formerly make.texinfo.~88~

This commit is contained in:
Roland McGrath 1993-04-12 21:11:48 +00:00
parent 596d50cb1c
commit 9bd8004ded

View File

@ -3,58 +3,19 @@
@setfilename make.info
@settitle GNU @code{make}
@setchapternewpage odd
@smallbook
@c %**end of header
@c For publication, format makebook.texi instead of using this file directly.
@set EDITION 0.41
@set VERSION 3.64 Beta
@set UPDATED 11 April 1993
@set UPDATED 12 April 1993
@set UPDATE-MONTH April 1993
@c finalout
@c ISPELL CHECK: done, 14 Jan 1993 --bob
@comment @ifset seems to be completely broken.
@ignore
@tex
\message{If you do not have the two-level texindex program, you will lose.}
% trying for a two-level index
% You need the rewritten texindex program for this to work.
\gdef\singleindexerfoo#1, #2\par{%
% Use a box register to test if #2 is empty.
\setbox0=\hbox{#2}%
\ifvoid0{% % A one-level entry.
\doind{\indexname}{#1}}\else{% % A two-level entry.
\dosubind{\indexname}{#1}{#2}%
}\fi}
\gdef\singleindexer#1{\singleindexerfoo#1, \par}
% This version writes two sort strings.
\gdef\dosubind #1#2#3{%
{\count10=\lastpenalty%
{\indexdummies% Must do this here, since \bf, etc expand at this stage
\escapechar=`\\%
{\let\folio=0%
\def\rawbackslashxx{\indexbackslash}%
%
% Now process the index-string once, with all font commands turned off,
% to get the string to sort the index by.
{\indexnofonts%
\xdef\tempa{#2}%
\xdef\tempb{#3}%
}%
% Now produce the complete index entry. We process the index-string again,
% this time with font commands expanded, to get what to print in the index.
\edef\temp{%
\write \csname#1indfile\endcsname{%
\realbackslash entry {\tempa}{\folio}{#2}{#3}{\tempb}}}%
\temp}%
}\penalty\count10}}
@end tex
@end ignore
@c Combine the variable and function indices:
@syncodeindex vr fn
@c Combine the program and concept indices:
@ -95,11 +56,9 @@ entitled ``GNU General Public License'' must be approved for accuracy
by the Foundation.
@end ifinfo
@ignore
@ifset shorttitlepage
@iftex
@shorttitlepage GNU Make
@end ifset
@end ignore
@end iftex
@titlepage
@title GNU Make
@subtitle A Program for Directing Recompilation
@ -3069,9 +3028,9 @@ 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 Variables}); on the command
variables: in a makefile (@pxref{Setting, ,Setting Variables}); on the command
line with an argument like @samp{MAKEOVERRIDES=}
(@pxref{Overriding Variables}); or with an environment variable
(@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
@ -3525,6 +3484,8 @@ command options (@pxref{Overriding, ,Overriding Variables}).
* Advanced:: Advanced features for referencing a variable.
* Values:: All the ways variables get their values.
* Setting:: How to set a variable in the makefile.
* Appending:: How to append more text to the old value
of a variable.
* Override Directive:: How to set a variable in the makefile even if
the user has set it with a command argument.
* Defining:: An alternate way to set a variable
@ -3869,8 +3830,10 @@ defines @code{a} as @samp{Hello}: @samp{$($(x))} becomes @samp{$($(y))}
which becomes @samp{$(z)} which becomes @samp{Hello}.
Nested variable references can also contain modified references and
function invocations (@pxref{Functions, ,Functions for Transforming Text}), just like any other reference.
For example, using the @code{subst} function (@pxref{Text Functions, ,Functions for String Substitution and Analysis}):
function invocations (@pxref{Functions, ,Functions for Transforming Text}),
just like any other reference.
For example, using the @code{subst} function
(@pxref{Text Functions, ,Functions for String Substitution and Analysis}):
@example
@group
@ -4026,9 +3989,10 @@ Several variables have constant initial values.
@xref{Implicit Variables, ,Variables Used by Implicit Rules}.
@end itemize
@node Setting, Override Directive, Values, Using Variables
@node Setting, Appending, Values, Using Variables
@section Setting Variables
@cindex setting variables
@cindex variables, setting
@cindex =
@cindex :=
@ -4067,13 +4031,140 @@ Several special variables are set
automatically to a new value for each rule; these are called the
@dfn{automatic} variables (@pxref{Automatic, ,Automatic Variables}).
@node Override Directive, Defining, Setting, Using Variables
@node Appending, Override Directive, Setting, Using Variables
@section Appending More Text to Variables
@cindex +=
@cindex appending to variables
@cindex variables, appending to
Often it is useful to add more text to the value of a variable already defined.
You do this with a line containing @samp{+=}, like this:
@example
objects += another.o
@end example
@noindent
This takes the value of the variable @code{objects}, and adds the text
@samp{another.o} to it (preceded by a single space). Thus:
@example
objects = main.o foo.o bar.o utils.o
objects += another.o
@end example
@noindent
sets @code{objects} to @samp{main.o foo.o bar.o utils.o another.o}.
Using @samp{+=} is similar to:
@example
objects = main.o foo.o bar.o utils.o
objects := $(objects) another.o
@end example
@noindent
but differs in ways that become important when you use more complex values.
When the variable in question has not been defined before, @samp{+=}
acts just like normal @samp{=}: it defines a recursively-expanded
variable. However, when there @emph{is} a previous definition, exactly
what @samp{+=} does depends on what flavor of variable you defined
originally. @xref{Flavors, ,The Two Flavors of Variables}, for an
explanation of the two flavors of variables.
When you add to a variable's value with @samp{+=}, @code{make} acts
essentially as if you had included the extra text in the initial
definition of the variable. If you defined it first with @samp{:=},
making it a simply-expanded variable, @samp{+=} adds to that
simply-expanded definition, and expands the new text before appending it
to the old value just as @samp{:=} does
(@pxref{Setting, ,Setting Variables}, for a full explanation of @samp{:=}).
In fact,
@example
variable := value
variable += more
@end example
@noindent
is exactly equivalent to:
@noindent
@example
variable := value
variable := $(variable) more
@end example
On the other hand, when you use @samp{+=} with a variable that you defined
first to be recursively-expanded using plain @samp{=}, @code{make} does
something a bit different. Recall that when you define a
recursively-expanded variable, @code{make} does not expand the value you set
for variable and function references immediately. Instead it stores the text
verbatim, and saves these variable and function references to be expanded
later, when you refer to the new variable (@pxref{Flavors, ,The Two Flavors
of Variables}). When you use @samp{+=} on a recursively-expanded variable,
it is this unexpanded text to which @code{make} appends the new text you
specify.
@example
variable = value
variable += more
@end example
@noindent
is roughly equivalent to:
@example
temp = value
variable = $(temp) more
@end example
@noindent
except that of course it never defines a variable called @code{temp}.
The importance of this comes when the variable's old value contains
variable references. Take this common example:
@example
CFLAGS = $(includes) -O
@dots{}
CFLAGS += -pg # enable profiling
@end example
@noindent
The first line defines the @code{CFLAGS} variable with a reference to another
variable, @code{includes}. (@code{CFLAGS} is used by the rules for C
compilation; @pxref{Catalogue of Rules, ,Catalogue of Implicit Rules}.)
Using @samp{=} for the definition makes @code{CFLAGS} a recursively-expanded
variable, meaning @w{@samp{$(includes) -O}} is @emph{not} expanded when
@code{make} processes the definition of @code{CFLAGS}. Thus, @code{includes}
need not be defined yet for its value to take effect. It only has to be
defined before any reference to @code{CFLAGS}. If we tried to append to the
value of @code{CFLAGS} without using @samp{+=}, we might do it like this:
@example
CFLAGS := $(CFLAGS) -pg # enable profiling
@end example
@noindent
This is close, but not quite what we want. Using @samp{:=} redefines
@code{CFLAGS} as a simply-expanded variable; this means @code{make} expands
the text @w{@samp{$(CFLAGS) -pg}} before setting the variable. If
@code{includes} is not yet defined, we get @w{@samp{ -O -pg}}, and a later
definition of @code{includes} will have no effect. Conversely, by using
@samp{+=} we set @code{CFLAGS} to the @emph{unexpanded} value
@w{@samp{$(includes) -O -pg}}. Thus we preserve the reference to
@code{includes}, so if that variable gets defined at any later point, a
reference like @samp{$(CFLAGS)} still uses its value.
@node Override Directive, Defining, Appending, Using Variables
@section The @code{override} Directive
@findex override
@cindex overriding with @code{override}
@cindex variable, overriding
@cindex variables, overriding
If a variable has been set with a command argument (@pxref{Overriding, ,Overriding Variables}),
If a variable has been set with a command argument
(@pxref{Overriding, ,Overriding Variables}),
then ordinary assignments in the makefile are ignored. If you want to set
the variable in the makefile even though it was set with a command
argument, you can use an @code{override} directive, which is a line that
@ -4083,6 +4174,7 @@ looks like this:@refill
override @var{variable} = @var{value}
@end example
@noindent
or
@example
@ -4125,7 +4217,7 @@ See the next section for information about @code{define}.
@findex endef
@cindex verbatim variable definition
@cindex defining variables verbatim
@cindex variable, defining verbatim
@cindex variables, defining verbatim
Another way to set the value of a variable is to use the @code{define}
directive. This directive has an unusual syntax which allows newline
@ -4182,7 +4274,7 @@ endef
@node Environment, , Defining, Using Variables
@section Variables from the Environment
@cindex variable, environment
@cindex variables, environment
@cindex environment
Variables in @code{make} can come from the environment in which
@code{make} is run. Every environment variable that @code{make} sees when
@ -5136,7 +5228,7 @@ no?), but it is more likely to be a mistake.
@node Origin Function, Shell Function, Foreach Function, Functions
@section The @code{origin} Function
@findex origin
@cindex variable, origin of
@cindex variables, origin of
@cindex origin of variable
The @code{origin} function is unlike most other functions in that it does
@ -5609,9 +5701,9 @@ Touch all the object files with @samp{make -t}.
@node Overriding, Testing, Avoiding Compilation, Running
@section Overriding Variables
@cindex overriding variables with arguments
@cindex variable, overriding with arguments
@cindex variables, overriding with arguments
@cindex command line variables
@cindex variable, command line
@cindex variables, command line
An argument that contains @samp{=} specifies the value of a variable:
@samp{@var{v}=@var{x}} sets the value of the variable @var{v} to @var{x}.
@ -6092,35 +6184,38 @@ available unless the makefile explicitly overrides or cancels them.
canceling or overriding an implicit rule. The @samp{-r} or
@samp{--no-builtin-rules} option cancels all predefined rules.
Not all of these rules will always be defined, even when the @samp{-r}
option is not given. Many of the predefined implicit rules are
implemented in @code{make} as suffix rules, so which ones will be
defined depends on the @dfn{suffix list} (the list of dependencies of
the special target @code{.SUFFIXES}). The default suffix list is:
@code{.out}, @code{.a}, @code{.ln}, @code{.o}, @code{.c}, @code{.cc},
@code{.C}, @code{.p}, @code{.f}, @code{.F}, @code{.r}, @code{.y},
@code{.l}, @code{.s}, @code{.S}, @code{.mod}, @code{.sym},
@code{.def}, @code{.h}, @code{.info}, @code{.dvi}, @code{.tex},
@code{.texinfo}, @code{.texi}, @code{.cweb}, @code{.web}, @code{.sh},
@code{.elc}, @code{.el}. All of the implicit rules described below
whose dependencies have one of these suffixes are actually suffix
rules. If you modify the suffix list, the only predefined suffix
rules in effect will be those named by one or two of the suffixes that
are on the list you specify; rules whose suffixes fail to be on the
list are disabled. @xref{Suffix Rules, ,Old-Fashioned Suffix Rules},
for full details on suffix rules.
Not all of these rules will always be defined, even when the @samp{-r} option
is not given. Many of the predefined implicit rules are implemented in
@code{make} as suffix rules, so which ones will be defined depends on the
@dfn{suffix list} (the list of dependencies of the special target
@code{.SUFFIXES}). The default suffix list is: @code{.out}, @code{.a},
@code{.ln}, @code{.o}, @code{.c}, @code{.cc}, @code{.C}, @code{.p},
@code{.f}, @code{.F}, @code{.r}, @code{.y}, @code{.l}, @code{.s}, @code{.S},
@code{.mod}, @code{.sym}, @code{.def}, @code{.h}, @code{.info}, @code{.dvi},
@code{.tex}, @code{.texinfo}, @code{.texi}, @code{.txinfo}, @code{.cweb},
@code{.web}, @code{.sh}, @code{.elc}, @code{.el}. All of the implicit rules
described below whose dependencies have one of these suffixes are actually
suffix rules. If you modify the suffix list, the only predefined suffix
rules in effect will be those named by one or two of the suffixes that are on
the list you specify; rules whose suffixes fail to be on the list are
disabled. @xref{Suffix Rules, ,Old-Fashioned Suffix Rules}, for full details
on suffix rules.
@table @asis
@item Compiling C programs
@cindex C, rule to compile
@pindex cc
@pindex gcc
@pindex .o
@pindex .c
@file{@var{n}.o} is made automatically from @file{@var{n}.c} with
a command of the form @samp{$(CC) -c $(CPPFLAGS) $(CFLAGS)}.@refill
@item Compiling C++ programs
@cindex C++, rule to compile
@pindex g++
@pindex .C
@pindex .cc
@file{@var{n}.o} is made automatically from @file{@var{n}.cc} or
@file{@var{n}.C} with a command of the form @samp{$(CXX) -c $(CPPFLAGS)
$(CXXFLAGS)}. We encourage you to use the suffix @samp{.cc} for C++
@ -6129,6 +6224,7 @@ source files instead of @samp{.C}.@refill
@item Compiling Pascal programs
@cindex Pascal, rule to compile
@pindex pc
@pindex .p
@file{@var{n}.o} is made automatically from @file{@var{n}.p}
with the command @samp{$(PC) -c $(PFLAGS)}.@refill
@ -6136,6 +6232,9 @@ with the command @samp{$(PC) -c $(PFLAGS)}.@refill
@cindex Fortran, rule to compile
@cindex Ratfor, rule to compile
@pindex f77
@pindex .f
@pindex .r
@pindex .F
@file{@var{n}.o} is made automatically from @file{@var{n}.r},
@file{@var{n}.F} or @file{@var{n}.f} by running the
Fortran compiler. The precise command used is as follows:@refill
@ -6165,6 +6264,9 @@ program. The precise command used is as follows:@refill
@item Compiling Modula-2 programs
@cindex Modula-2, rule to compile
@pindex m2c
@pindex .sym
@pindex .def
@pindex .mod
@file{@var{n}.sym} is made from @file{@var{n}.def} with a command
of the form @samp{$(M2C) $(M2FLAGS) $(DEFFLAGS)}. @file{@var{n}.o}
is made from @file{@var{n}.mod}; the form is:
@ -6174,10 +6276,12 @@ is made from @file{@var{n}.mod}; the form is:
@item Assembling and preprocessing assembler programs
@cindex assembly, rule to compile
@pindex as
@pindex .s
@file{@var{n}.o} is made automatically from @file{@var{n}.s} by
running the assembler, @code{as}. The precise command is
@samp{$(AS) $(ASFLAGS)}.@refill
@pindex .S
@file{@var{n}.s} is made automatically from @file{@var{n}.S} by
running the C preprocessor, @code{cpp}. The precise command is
@w{@samp{$(CPP) $(CPPFLAGS)}}.
@ -6228,12 +6332,14 @@ done.@refill
@item Yacc for C programs
@pindex yacc
@cindex Yacc, rule to run
@pindex .y
@file{@var{n}.c} is made automatically from @file{@var{n}.y} by
running Yacc with the command @samp{$(YACC) $(YFLAGS)}.
@item Lex for C programs
@pindex lex
@cindex Lex, rule to run
@pindex .l
@file{@var{n}.c} is made automatically from @file{@var{n}.l} by
by running Lex. The actual command is @samp{$(LEX) $(LFLAGS)}.
@ -6262,6 +6368,7 @@ the list of implicit rule suffixes with:@refill
@item Making Lint Libraries from C, Yacc, or Lex programs
@pindex lint
@cindex @code{lint}, rule to run
@pindex .ln
@file{@var{n}.ln} is made from @file{@var{n}.c} with a command of
the form @w{@samp{$(LINT) $(LINTFLAGS) $(CPPFLAGS) -i}}.
The same command is used on the C code produced from
@ -6275,6 +6382,10 @@ The same command is used on the C code produced from
@pindex weave
@pindex tangle
@pindex ctangle
@pindex .dvi
@pindex .tex
@pindex .web
@pindex .cweb
@file{@var{n}.dvi} is made from @file{@var{n}.tex} with the
command @samp{$(TEX)}. @file{@var{n}.tex} is made from
@file{@var{n}.web} with @samp{$(WEAVE)}, or from @file{@var{n}.cweb}
@ -6287,14 +6398,19 @@ made from @file{@var{n}.cweb} with @samp{$(CTANGLE)}.@refill
@cindex Info, rule to format
@pindex texi2dvi
@pindex makeinfo
@file{@var{n}.dvi} is made from @file{@var{n}.texinfo} or
@file{@var{n}.texi} with the @samp{$(TEXI2DVI)} command.
@file{@var{n}.info} is made from @file{@var{n}.texinfo} or
@file{@var{n}.texi} with the @samp{$(MAKEINFO)} command .@refill
@pindex .texinfo
@pindex .info
@pindex .texi
@pindex .txinfo
@file{@var{n}.dvi} is made from @file{@var{n}.texinfo}, @file{@var{n}.texi},
or @file{@var{n}.txinfo}, with the @samp{$(TEXI2DVI)} command.
@file{@var{n}.info} is made from @file{@var{n}.texinfo}, @file{@var{n}.texi},
or @file{@var{n}.txinfo}, with the @samp{$(MAKEINFO)} command.@refill
@item RCS
@cindex RCS, rule to extract from
@pindex co
@pindex ,v @r{(RCS file extension)}
Any file @file{@var{n}} is extracted if necessary from an RCS file
named either @file{@var{n},v} or @file{RCS/@var{n},v}. The precise
command used is @w{@samp{$(CO) $(COFLAGS)}}. @file{@var{n}} will not be
@ -6307,6 +6423,7 @@ actually exist.@refill
@item SCCS
@cindex SCCS, rule to extract from
@pindex get
@pindex s. @r{(SCCS file prefix)}
Any file @file{@var{n}} is extracted if necessary from an SCCS file
named either @file{s.@var{n}} or @file{SCCS/s.@var{n}}. The precise
command used is @w{@samp{$(GET) $(GFLAGS)}}. The rules for SCCS are
@ -6314,6 +6431,7 @@ terminal (@pxref{Match-Anything Rules, ,Match-Anything Pattern Rules}),
so SCCS files cannot be generated from another source; they must
actually exist.@refill
@pindex .sh
For the benefit of SCCS, a file @file{@var{n}} is copied from
@file{@var{n}.sh} and made executable (by everyone). This is for
shell scripts that are checked into SCCS. Since RCS preserves the
@ -6770,8 +6888,8 @@ dependencies, and it will execute happily ever after.)@refill
@node Automatic, Pattern Match, Pattern Examples, Pattern Rules
@subsection Automatic Variables
@cindex automatic variables
@cindex variable, automatic
@cindex variable, and implicit rule
@cindex variables, automatic
@cindex variables, and implicit rule
Suppose you are writing a pattern rule to compile a @samp{.c} file into a
@samp{.o} file: how do you write the @samp{cc} command so that it operates
@ -7631,6 +7749,10 @@ inspired whom, since GNU @code{make} had @code{patsubst} before SunOS
The special significance of @samp{+} characters preceding command lines
(@pxref{Instead of Execution, ,Instead of Executing the Commands}) is
mandated by draft 11.2 of IEEE Std 1003.2 (POSIX).@refill
@item
The @samp{+=} syntax to append to the value of a variable comes from SunOS
4.0 @code{make}. @xref{Appending, , Appending More Text to Variables}.
@end itemize
The remaining features are inventions new in GNU @code{make}: