mirror of
https://github.com/mirror/make.git
synced 2025-04-08 18:41:28 +08:00
Formerly make.texinfo.~35~
This commit is contained in:
parent
cda455684c
commit
c29174d96b
132
make.texinfo
132
make.texinfo
@ -19,7 +19,7 @@ automatically which pieces of a large program need to be recompiled,
|
||||
and issues the commands to recompile them.
|
||||
|
||||
@c !!set edition, date, version
|
||||
This is Edition 0.33 Beta, last updated 6 July 1992,
|
||||
This is Edition 0.33 Beta, last updated 16 July 1992,
|
||||
of @cite{The GNU Make Manual}, for @code{make}, Version 3.63 Beta.
|
||||
|
||||
Copyright (C) 1988, 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
|
||||
@ -54,7 +54,7 @@ by the Foundation.
|
||||
@title GNU Make
|
||||
@subtitle A Program for Directing Recompilation
|
||||
@subtitle Edition 0.33 Beta, for @code{make} Version 3.63 Beta.
|
||||
@subtitle June 1992
|
||||
@subtitle July 1992
|
||||
@author by Richard M. Stallman and Roland McGrath
|
||||
@page
|
||||
@vskip 0pt plus 1filll
|
||||
@ -94,12 +94,13 @@ large program need to be recompiled, and issues the commands to
|
||||
recompile them.@refill
|
||||
|
||||
This is Edition 0.33 Beta of the @cite{GNU Make Manual},
|
||||
last updated 12 June 1992,
|
||||
last updated 16 July 1992
|
||||
for @code{make} Version 3.63 Beta.@refill
|
||||
|
||||
This manual describes @code{make} and contains the following chapters:@refill
|
||||
@end ifinfo
|
||||
|
||||
@c !!! Edit descriptions.
|
||||
@menu
|
||||
* Copying:: GNU GENERAL PUBLIC LICENSE
|
||||
* Overview:: Introducing @code{make}.
|
||||
@ -1079,7 +1080,7 @@ without running them. The commands for @file{foo} will be those
|
||||
specified by the existing contents of @file{mfile}.
|
||||
|
||||
@node Overriding Makefiles, , Remaking Makefiles, Makefiles
|
||||
@section Overriding Part of One Makefile with Another Makefile
|
||||
@section Overriding Part of Another Makefile
|
||||
|
||||
@cindex overriding makefiles
|
||||
Sometimes it is useful to have a makefile that is mostly just like
|
||||
@ -1648,6 +1649,8 @@ will repeat the appropriate search when it processes this argument.@refill
|
||||
|
||||
A phony target is one that is not really the name of a file. It is just a
|
||||
name for some commands to be executed when you make an explicit request.
|
||||
There are two reasons to use a phony target: to avoid a conflict with
|
||||
file of the same name, and to improve performance.
|
||||
|
||||
If you write a rule whose commands will not create the target file, the
|
||||
commands will be executed every time the target comes up for remaking.
|
||||
@ -1663,9 +1666,6 @@ Because the @code{rm} command does not create a file named @file{clean},
|
||||
probably no such file will ever exist. Therefore, the @code{rm} command
|
||||
will be executed every time you say @samp{make clean}.
|
||||
|
||||
@c !!!! want to mention that using .PHONY is a performance win because
|
||||
@c implicit rule serach is not done for phony targets --roland
|
||||
|
||||
@findex .PHONY
|
||||
The phony target will cease to work if anything ever does create a file
|
||||
named @file{clean} in this directory. Since it has no dependencies, the
|
||||
@ -1682,6 +1682,12 @@ declare the target to be phony, using the special target @code{.PHONY}
|
||||
Once this is done, @samp{make clean} will run the commands regardless of
|
||||
whether there is a file named @file{clean}.
|
||||
|
||||
Since @code{make} knows that phony targets do not name actual files
|
||||
that could be remade from other files, @code{make} skips the implicit
|
||||
rule search for phony targets (@pxref{Implicit}). This is why
|
||||
declaring a target phony is good for performance, even if you are not
|
||||
worried about the actual file existing.
|
||||
|
||||
Thus, you first write the line that states that @code{clean} is a
|
||||
phony target, then you write the rule, like this:
|
||||
|
||||
@ -3439,12 +3445,14 @@ because you know that no makefile will use them for other things. (But
|
||||
this is not totally reliable; some makefiles set @code{CFLAGS} explicitly
|
||||
and therefore are not affected by the value in the environment.)
|
||||
|
||||
@c !!!! this is completely wrong --roland
|
||||
When @code{make} is invoked recursively, variables defined in the outer
|
||||
invocation are automatically passed to inner invocations through the
|
||||
environment (@pxref{Recursion, ,Recursive Use of @code{make}}). This is the main purpose of turning
|
||||
environment variables into @code{make} variables, and it requires no
|
||||
attention from you.@refill
|
||||
When @code{make} is invoked recursively, variables defined in the
|
||||
outer invocation can be passed to inner invocations through the
|
||||
environment (@pxref{Recursion, ,Recursive Use of @code{make}}). By
|
||||
default, only variables that came from the environment or the command
|
||||
line are passed to recursive invocations. You can use the
|
||||
@code{export} directive to pass other variables.
|
||||
@xref{Variables/Recursion, , Communicating Variables to a
|
||||
Sub-@code{make}}, for full details.
|
||||
|
||||
Other use of variables from the environment is not recommended. It is not
|
||||
wise for makefiles to depend for their functioning on environment variables
|
||||
@ -3515,11 +3523,11 @@ is not used. It is optional to have an @code{else} in a conditional.
|
||||
The @code{endif} directive ends the conditional. Every conditional must
|
||||
end with an @code{endif}. Unconditional makefile text follows.
|
||||
|
||||
@c !!!! this is repeated below --roland
|
||||
Conditionals work at the textual level: the lines of the conditional are
|
||||
treated as part of the makefile, or ignored, according to the condition.
|
||||
This is why the larger syntactic units of the makefile, such as rules, may
|
||||
cross the beginning or the end of the conditional.
|
||||
As this example illustrates, conditionals work at the textual level:
|
||||
the lines of the conditional are treated as part of the makefile, or
|
||||
ignored, according to the condition. This is why the larger syntactic
|
||||
units of the makefile, such as rules, may cross the beginning or the
|
||||
end of the conditional.
|
||||
|
||||
When the variable @code{CC} has the value @samp{gcc}, the above example has
|
||||
this effect:
|
||||
@ -3664,12 +3672,17 @@ arguments. Extra spaces are allowed and ignored at the beginning of the
|
||||
line, and spaces or tabs at the end. A comment starting with @samp{#} may
|
||||
appear at the end of the line.
|
||||
|
||||
@c !!!! repeated above
|
||||
Conditionals work at the textual level. The lines of the
|
||||
@var{text-if-true} are read as part of the makefile if the condition is
|
||||
true; if the condition is false, those lines are ignored completely. It
|
||||
follows that syntactic units of the makefile, such as rules, may safely be
|
||||
split across the beginning or the end of the conditional.@refill
|
||||
Conditionals affect which lines of the makefile @code{make} uses. If
|
||||
the condition is true, @code{make} reads the lines of the
|
||||
@var{text-if-true} as part of the makefile; if the condition is false,
|
||||
@code{make} ignores those lines completely. It follows that syntactic
|
||||
units of the makefile, such as rules, may safely be split across the
|
||||
beginning or the end of the conditional.@refill
|
||||
|
||||
@code{make} evaluates conditionals when it reads a makefile.
|
||||
Consequently, you cannot use automatic variables in the tests of
|
||||
conditionals because they are not defined until commands are run
|
||||
(@pxref{Automatic}).
|
||||
|
||||
To prevent intolerable confusion, it is not permitted to start a
|
||||
conditional in one makefile and end it in another. However, you may
|
||||
@ -3894,7 +3907,6 @@ function.@refill
|
||||
|
||||
For example, given:
|
||||
|
||||
@noindent @c !!!! will this do what I want? --roland
|
||||
@example
|
||||
@group
|
||||
objects=main1.o foo.o main2.o bar.o
|
||||
@ -4135,7 +4147,6 @@ of the names are ignored.
|
||||
|
||||
For example,
|
||||
|
||||
@noindent @c !!!! ? --roland
|
||||
@example
|
||||
$(firstword foo bar)
|
||||
@end example
|
||||
@ -4385,10 +4396,10 @@ using a very strange shell, this has the same result as @samp{$(wildcard
|
||||
@node Running, Implicit Rules, Functions, Top
|
||||
@chapter How to Run @code{make}
|
||||
|
||||
A makefile that says how to recompile a program can be used in more than
|
||||
one way. The simplest use is to recompile every file that is out of date.
|
||||
This is what @code{make} will do if run with no arguments.
|
||||
@c !!!! this is misleading --roland
|
||||
A makefile that says how to recompile a program can be used in more
|
||||
than one way. The simplest use is to recompile every file that is out
|
||||
of date. Usually, makefiles are written so that if you run
|
||||
@code{make} with no arguments, it does just that.
|
||||
|
||||
But you might want to update only some of the files; you might want to use
|
||||
a different compiler or different compiler options; you might want just to
|
||||
@ -5041,9 +5052,6 @@ 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.@refill
|
||||
|
||||
@c !!!! do we want to document $(COMPILE.c) et al? --roland
|
||||
@c !!!! and $(TARGET_ARCH)?
|
||||
|
||||
@table @asis
|
||||
@item Compiling C programs
|
||||
@file{@var{n}.o} will be made automatically from @file{@var{n}.c} with
|
||||
@ -5217,6 +5225,29 @@ comparable (or inferior) proprietary software, you support the free
|
||||
software movement.
|
||||
@end table
|
||||
|
||||
Usually, you want to change only the variables listed in the table
|
||||
above, which are documented in the following section.
|
||||
|
||||
However, the commands in built-in implicit rules actually use
|
||||
variables such as @code{COMPILE.c}, @code{LINK.p}, and
|
||||
@code{PREPROCESS.S}, whose values contain the commands listed above.
|
||||
|
||||
@code{make} follows the convention that the rule to compile a
|
||||
@file{.@var{x}} source file uses the variable @code{COMPILE.@var{x}}.
|
||||
Similarly, the rule to produce an executable from a @file{.@var{x}}
|
||||
file uses @code{LINK.@var{x}}; and the rule to preprocess a
|
||||
@file{.@var{x}} file uses @code{PREPROCESS.@var{x}}.
|
||||
|
||||
Every rule that produces an object file uses the variable
|
||||
@code{OUTPUT_OPTION}. @code{make} defines this variable either to
|
||||
contain @samp{-o $@@}, or to be empty, depending on a compile-time
|
||||
option. You need the @samp{-o} option to ensure that the output goes
|
||||
into the right file when the source file is in a different directory,
|
||||
as when using @code{VPATH} (@pxref{Directory Search}). However,
|
||||
compilers on some systems do not accept a @samp{-o} switch for object
|
||||
files. If you use such a system, and use @code{VPATH}, some
|
||||
compilations will put their output in the wrong place.
|
||||
|
||||
@node Implicit Variables, Chained Rules, Catalogue of Rules, Implicit Rules
|
||||
@section Variables Used by Implicit Rules
|
||||
@cindex flags for compilers
|
||||
@ -5491,12 +5522,10 @@ Thus, a pattern rule @samp{%.o : %.c} says how to make any file
|
||||
@subsection Introduction to Pattern Rules
|
||||
@cindex pattern rule
|
||||
|
||||
@c !!!! this paragraph is a repeat of the first paragraph of prev node
|
||||
You define an implicit rule by writing a @dfn{pattern rule}. A pattern
|
||||
rule looks like an ordinary rule, except that its target contains the
|
||||
character @samp{%} (exactly one of them). The target is considered a
|
||||
pattern for matching file names; the @samp{%} can match any nonempty
|
||||
substring, while other characters match only themselves.
|
||||
A pattern rule contains the character @samp{%} (exactly one of them)
|
||||
in the target; otherwise, it looks exactly like an ordinary rule. The
|
||||
target is a pattern for matching file names; the @samp{%} matches any
|
||||
nonempty substring, while other characters match only themselves.
|
||||
|
||||
For example, @samp{%.c} as a pattern matches any file name that ends in
|
||||
@samp{.c}. @samp{s.%.c} as a pattern matches any file name that starts
|
||||
@ -6507,9 +6536,8 @@ We feel that such usage is broken. The dependency properties of
|
||||
and doing such a thing simply does not fit the model.@refill
|
||||
@end itemize
|
||||
|
||||
@node Summary, Complex Makefile, Missing, Top
|
||||
@appendix Summary of Directives, Functions, and Special Variables
|
||||
@c !!!! this title is too long for the page
|
||||
@node Quick Reference, Complex Makefile, Missing, Top
|
||||
@appendix Quick Reference
|
||||
|
||||
This appendix summarizes the directives, text manipulation functions,
|
||||
and special variables which GNU @code{make} understands.
|
||||
@ -6819,26 +6847,12 @@ distribution kits.
|
||||
# Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
@end group
|
||||
|
||||
@c !!!! must we have all this copying info? --roland
|
||||
@group
|
||||
# This program is free software; you can redistribute
|
||||
# it and/or modify it under the terms of the GNU
|
||||
# General Public License as published by the Free
|
||||
# Software Foundation; either version 2, or (at your
|
||||
# option) any later version.
|
||||
@end group
|
||||
|
||||
# This program is distributed in the hope that it will
|
||||
# be useful, but WITHOUT ANY WARRANTY; without even
|
||||
# the implied warranty of MERCHANTABILITY or FITNESS
|
||||
# FOR A PARTICULAR PURPOSE.
|
||||
# See the GNU General Public License for more details.
|
||||
|
||||
@group
|
||||
# You should have received a copy of the GNU General
|
||||
# Public License along with this program; if not,
|
||||
# write to the Free Software Foundation, Inc.,
|
||||
# 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
# General Public License @dots{}
|
||||
@dots{}
|
||||
@dots{}
|
||||
@end group
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
Loading…
Reference in New Issue
Block a user