mirror of
https://github.com/mirror/make.git
synced 2024-12-28 22:00:33 +08:00
Misc cleanup
This commit is contained in:
parent
a20cb3e189
commit
e693e99067
114
make.texinfo
114
make.texinfo
@ -6,7 +6,10 @@
|
||||
$Header$
|
||||
|
||||
$Log$
|
||||
Revision 1.23 1988/05/22 12:29:23 mcgrath
|
||||
Revision 1.24 1988/05/22 13:39:08 mcgrath
|
||||
Misc cleanup
|
||||
|
||||
Revision 1.23 88/05/22 12:29:23 mcgrath
|
||||
Static pattern rules section rewritten by RMS.
|
||||
|
||||
Revision 1.22 88/05/20 17:00:49 mcgrath
|
||||
@ -136,8 +139,7 @@ into another language, under the above conditions for modified versions.
|
||||
|
||||
The purpose of the @code{make} utility is to determine automatically which
|
||||
pieces of a large program need to be recompiled, and issue the commands to
|
||||
recompile them. This manual describes the GNU implementation of
|
||||
@code{make}.
|
||||
recompile them. This manual describes the GNU implementation of @code{make}.
|
||||
|
||||
GNU @code{make} was implemented by Richard Stallman and Roland McGrath.
|
||||
|
||||
@ -147,14 +149,14 @@ shell command. In fact, @code{make} is not limited to programs. You can
|
||||
use it to describe any task where some files must be updated automatically
|
||||
from others whenever the others change.
|
||||
|
||||
To prepare to use @code{make}, you must write a file called the
|
||||
@dfn{makefile} that describes the relationships among files in your
|
||||
program, and the states the commands for updating each file. In a program,
|
||||
typically the executable file is updated from object files, which are in
|
||||
turn made by compiling source files.
|
||||
To prepare to use @code{make}, you must write a file called
|
||||
the @dfn{makefile} that describes the relationships among files
|
||||
in your program, and the states the commands for updating each file.
|
||||
In a program, typically the executable file is updated from object
|
||||
files, which are in turn made by compiling source files.@refill
|
||||
|
||||
Once a suitable makefile exists, each time you change some source files, this
|
||||
simple shell command:
|
||||
Once a suitable makefile exists, each time you change some source files,
|
||||
this simple shell command:
|
||||
|
||||
@example
|
||||
make
|
||||
@ -209,17 +211,22 @@ to do something or not, report that too; it's a bug in the documentation!
|
||||
|
||||
Before reporting a bug or trying to fix it yourself, try to isolate it to
|
||||
the smallest possible makefile that reproduces the problem. Then send
|
||||
the makefile, the exact results @code{make} gave you. Also say what
|
||||
us the makefile and the exact results @code{make} gave you. Also say what
|
||||
you expected to occur; this will help us decide whether the problem
|
||||
was in the documentation.
|
||||
was really in the documentation.
|
||||
|
||||
Once you've got a precise problem, send electronic mail to Internet
|
||||
address @samp{bug-gnu-utils@@prep.ai.mit.edu} or UUCP path
|
||||
Once you've got a precise problem, send electronic mail to
|
||||
Internet address @samp{bug-gnu-utils@@prep.ai.mit.edu} or UUCP path
|
||||
@samp{mit-eddie!prep.ai.mit.edu!bug-gnu-utils}. Please include the version
|
||||
number of @code{make} you are using. You can get this information with the
|
||||
command @samp{make -v -f /dev/null}.@refill
|
||||
|
||||
Non-bug suggestions are always welcome as well.
|
||||
If you have questions about things that are unclear in the documentation
|
||||
or are just obscure features, ask Roland McGrath; he'll be happy to help
|
||||
you out (but no promises). You can send him electronic mail at Internet
|
||||
address @samp{roland@@wheaties.ai.mit.edu} or UUCP path
|
||||
@samp{mit-eddie!wheaties.ai.mit.edu!roland}.
|
||||
|
||||
@node Simple, Makefiles, Bugs, Top
|
||||
@section Simple Example of @code{make}
|
||||
@ -231,7 +238,7 @@ only those defining editing commands include @file{commands.h} and only low
|
||||
level files that change the editor buffer include @file{buffer.h}.
|
||||
|
||||
To recompile the editor, each changed C source file must be recompiled. If
|
||||
a header file has changed, in order to be safe each C source file that
|
||||
a header file has changed, to be safe each C source file that
|
||||
includes the header file must be recompiled. Each compilation produces an
|
||||
object file corresponding to the source file. Finally, if any source file
|
||||
has been recompiled, all the object files, whether newly made or saved from
|
||||
@ -243,26 +250,26 @@ how to compile and link when the time comes:
|
||||
|
||||
@example
|
||||
edit : main.o kbd.o commands.o display.o \
|
||||
insert.o search.o files.o utils.o
|
||||
cc -o edit main.o kbd.o commands.o display.o \
|
||||
insert.o search.o files.o utils.o
|
||||
insert.o search.o files.o utils.o
|
||||
cc -o edit main.o kbd.o commands.o display.o \
|
||||
insert.o search.o files.o utils.o
|
||||
|
||||
main.o : main.c defs.h
|
||||
cc -c main.c
|
||||
cc -c main.c
|
||||
kbd.o : kbd.c defs.h command.h
|
||||
cc -c kbd.c
|
||||
cc -c kbd.c
|
||||
commands.o : command.c defs.h command.h
|
||||
cc -c commands.c
|
||||
cc -c commands.c
|
||||
display.o : display.c defs.h buffer.h
|
||||
cc -c display.c
|
||||
cc -c display.c
|
||||
insert.o : insert.c defs.h buffer.h
|
||||
cc -c insert.c
|
||||
cc -c insert.c
|
||||
search.o : search.c defs.h buffer.h
|
||||
cc -c search.c
|
||||
cc -c search.c
|
||||
files.o : files.c defs.h buffer.h command.h
|
||||
cc -c files.c
|
||||
cc -c files.c
|
||||
utils.o : utils.c defs.h
|
||||
cc -c utils.c
|
||||
cc -c utils.c
|
||||
@end example
|
||||
|
||||
We split each long line into two lines using a backslash-newline; this is
|
||||
@ -278,23 +285,23 @@ After the colon come the target's @dfn{dependencies}: all the files that
|
||||
are used as input when the target file is updated. A target file needs to
|
||||
be recompiled or relinked if any of its dependencies changes. In addition,
|
||||
any dependencies that are themselves automatically generated should be
|
||||
updated first. In this example, @file{edit} depends on each of the
|
||||
eight object files; the object file @file{main.o} depends on the source
|
||||
file @file{main.c} and on the header file @file{defs.h}.
|
||||
updated first. In this example, @file{edit} depends on each of the eight
|
||||
object files; the object file @file{main.o} depends on the source file
|
||||
@file{main.c} and on the header file @file{defs.h}.
|
||||
|
||||
By default, @code{make} starts with the first rule (not counting rules
|
||||
whose target names start with @samp{.}). This is called the @dfn{default
|
||||
goal}. Therefore, we put the rule for the executable program @file{edit}
|
||||
first. The other rules are processed because their targets appear as
|
||||
dependencies in the goal.
|
||||
dependencies of the goal.
|
||||
|
||||
After each line containing a target and dependencies come one or more lines
|
||||
of shell commands that say how to update the target file. These lines
|
||||
start with a tab to tell @code{make} that they are command lines.
|
||||
But @code{make} does not know anything about how the commands work. It is up
|
||||
to you to supply commands that will update the target file properly. All
|
||||
@code{make} does is execute the commands you have specified when the target
|
||||
file needs to be updated.
|
||||
start with a tab to tell @code{make} that they are command lines. But
|
||||
@code{make} does not know anything about how the commands work. It is up
|
||||
to you to supply commands that will update the target file properly.
|
||||
All @code{make} does is execute the commands you have specified when the
|
||||
target file needs to be updated.
|
||||
|
||||
@subsection How @code{make} Processes This Makefile
|
||||
|
||||
@ -311,8 +318,8 @@ Before recompiling an object file, @code{make} considers updating its
|
||||
dependencies, the source file and header files. This makefile does not
|
||||
specify anything to be done for them---the @samp{.c} and @samp{.h} files
|
||||
are not the targets of any rules---so nothing needs to be done. But
|
||||
automatically generated C programs, such as made by Yacc, would be updated
|
||||
by their own rules at this time.
|
||||
automatically generated C programs, such as made by Yacc (or Bison), would
|
||||
be updated by their own rules at this time.
|
||||
|
||||
After recompiling whichever object files need it, @code{make} can now
|
||||
decide whether to relink @file{edit}. This must be done if the file
|
||||
@ -327,9 +334,9 @@ In our example, we had to list all the object files twice in the rule for
|
||||
|
||||
@example
|
||||
edit : main.o kbd.o commands.o display.o \
|
||||
insert.o search.o files.o utils.o
|
||||
cc -o edit main.o kbd.o commands.o display.o \
|
||||
insert.o search.o files.o utils.o
|
||||
insert.o search.o files.o utils.o
|
||||
cc -o edit main.o kbd.o commands.o display.o \
|
||||
insert.o search.o files.o utils.o
|
||||
@end example
|
||||
|
||||
@vindex objects
|
||||
@ -340,9 +347,9 @@ allow a text string to be defined once and substituted in multiple places
|
||||
later (@pxref{Variables}).
|
||||
|
||||
It's standard practice for every makefile to have a variable named
|
||||
@code{objects}, @code{OBJECTS} or @code{OBJ} which is a list of all object
|
||||
file names. We would define such a variable @code{objects} with a line
|
||||
like this in the makefile:
|
||||
@code{objects}, @code{OBJECTS}, @code{objs}, @code{OBJS}, @code{obj} or
|
||||
@code{OBJ} which is a list of all object file names. We would define
|
||||
such a variable @code{objects} with a line like this in the makefile:@refill
|
||||
|
||||
@example
|
||||
objects = main.o kbd.o commands.o display.o \
|
||||
@ -357,7 +364,7 @@ result:
|
||||
|
||||
@example
|
||||
edit : $(objects)
|
||||
cc -o edit $(objects)
|
||||
cc -o edit $(objects)
|
||||
@end example
|
||||
|
||||
@subsection Letting @code{make} Deduce the Commands
|
||||
@ -371,8 +378,8 @@ use the command @samp{cc -c main.c -o main.o} to compile @file{main.c} into
|
||||
object files. @xref{Implicit}.@refill
|
||||
|
||||
When a @samp{.c} file is used automatically in this way, it is also
|
||||
automatically added to the list of dependencies. We can therefore omit the
|
||||
@samp{.c} files from the dependencies, provided we omit the commands.
|
||||
automatically added to the list of dependencies. We can therefore omit
|
||||
the @samp{.c} files from the dependencies, provided we omit the commands.
|
||||
|
||||
Here is the entire example, with both of these changes, and a variable
|
||||
@code{objects} as suggested above:
|
||||
@ -382,7 +389,7 @@ objects = main.o kbd.o commands.o display.o \
|
||||
insert.o search.o files.o utils.o
|
||||
|
||||
edit : $(objects)
|
||||
cc -o edit $(objects)
|
||||
cc -o edit $(objects)
|
||||
|
||||
main.o : defs.h
|
||||
kbd.o : defs.h command.h
|
||||
@ -408,7 +415,7 @@ objects = main.o kbd.o commands.o display.o \
|
||||
insert.o search.o files.o utils.o
|
||||
|
||||
edit : $(objects)
|
||||
cc -o edit $(objects)
|
||||
cc -o edit $(objects)
|
||||
|
||||
$(objects) : defs.h
|
||||
kbd.o commands.o files.o : command.h
|
||||
@ -433,7 +440,7 @@ reading a data base called the @dfn{makefile}.
|
||||
|
||||
@menu
|
||||
* Contents: Makefile Contents. Overview of what you put in a makefile.
|
||||
* Names: Makefile Names. Where @code{make} finds the makefile.
|
||||
* Names: Makefile Names. Where @code{make} finds the makefile.
|
||||
* Include:: How one makefile can use another makefile.
|
||||
@end menu
|
||||
|
||||
@ -467,8 +474,8 @@ reading the makefile. These include:
|
||||
Reading another makefile (@pxref{Include}).
|
||||
|
||||
@item
|
||||
Deciding (based on the values of variables) whether to use or ignore a
|
||||
part of the makefile (@pxref{Conditionals}).
|
||||
Deciding (based on the values of variables) whether to use or
|
||||
ignore a part of the makefile (@pxref{Conditionals}).
|
||||
|
||||
@item
|
||||
Defining a variable from a verbatim string containing multiple lines
|
||||
@ -492,7 +499,8 @@ By default, when @code{make} looks for the makefile, it tries the names
|
||||
@file{./makefile} and @file{./Makefile} in that order. So normally you call
|
||||
your makefile by one of these two names, and @code{make} finds it
|
||||
automatically. We recommend @file{Makefile} because it appears prominently
|
||||
near the beginning of a directory listing.
|
||||
near the beginning of a directory listing (right near other important
|
||||
files such as @file{README}).@refill
|
||||
|
||||
If @code{make} finds neither of these two names, it does not use any
|
||||
makefile. Then you must specify a goal with a command argument, and
|
||||
@ -514,7 +522,7 @@ additional makefiles to be read before the others. This works much like
|
||||
the @code{include} directive: various directories are searched for those
|
||||
files and the default goal is never taken from them. @xref{Include}. In
|
||||
addition, it is not an error if the files listed in @code{MAKEFILES} are
|
||||
not found.
|
||||
not found.@refill
|
||||
|
||||
The main use of @code{MAKEFILES} is in communication between recursive
|
||||
invocations of @code{make} (@pxref{Recursion}). It usually isn't
|
||||
|
Loading…
Reference in New Issue
Block a user