home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
342a.lha
/
make
/
make.n
< prev
next >
Wrap
Text File
|
1990-02-10
|
7KB
|
251 lines
.so an
.de HP
.ti -5
.en
.TH MAKE 1 "AMIGA Programmer's Manual"
.SH NAME
make - maintain program groups
.SH SYNTAX
make [ -f makefile ] [ option ] ... file ...
.SH DESCRIPTION
.I Make
executes commands in
.I makefile
to update one or more target
.I names. Name
is typically a program. If no -f option
is present, `makefile' and `Makefile' are tried in order.
If
.I makefile
is `-', the standard input is taken. More than one -f option may appear.
.I Make
updates a target if it depends on prerequisite files that have been
modified since the target was last modified, or if the target does not
exist.
.I Makefile
contains a sequence of entries that specify dependencies. The first line of
an entry is a blank-separated list of targets, then a colon, then a list of
prerequisite files. Text following a semicolon, and all following lines
that begin with a tab, are shell commands to be executed to update the
target. If a name appears on the left of more than one `colon' line, then
it depends on all of the names on the right of the colon on those lines,
but only one command sequence may be specified for it. If a name appears on
a line with a double colon :: then the command sequence following that line
is performed only if the name is out of date with respect to the names to
the right of the double colon, and is not affected by other double colon
lines on which that name may appear.
Two special forms of a name are recognized. A name like
.I a(b)
means the file named
.I b
stored in the archive named
.I a.
A name like
.I a((b))
means the file stored in archive a containing the entry point
.I b.
Sharp and newline surround comments.
The following makefile says that `pgm' depends on two files `a.o' and
`b.o', and that they in turn depend on `.c' files and a common file `incl'.
pgm: a.o b.o
cc a.o b.o -lm -o pgm
a.o: incl a.c
cc -c a.c
b.o: incl b.c
cc -c b.c
.I Makefile
entries of the form
string1 = string2
are macro definitions. Subsequent appearances of
.I $(string1)
or
.I ${string1}
are replaced by
.I string2.
If
.I string1
is a single character, the parentheses or braces are optional.
.I Make
infers prerequisites for files for which
.I makefile
gives no construction commands. For example, a `.c' file may be inferred as
prerequisite for a `.o' file and be compiled to produce the `.o' file. Thus
the preceding example can be done more briefly:
pgm: a.o b.o
cc a.o b.o -lm -o pgm
a.o b.o: incl
Prerequisites are inferred according to selected suffixes listed as the
`prerequisites' for the special name `.SUFFIXES'; multiple lists
accumulate; an empty list clears what came before. Order is significant;
the first possible name for which both a file and a rule as described in
the next paragraph exist is inferred. The default list is
.SUFFIXES: .out .o .c .e .r .f .y .l .s .p
The rule to create a file with suffix
.I s2
that depends on a similarly named file with suffix
.I s1
is specified as an entry for the `target'
.I s1s2.
In such an entry, the special macro $* stands for the target name with
suffix deleted, $@@ for the full target name, $< for the complete list of
prerequisites, and $? for the list of prerequisites that are out of date.
For example, a rule for making optimized `.o' files from `.c' files is
.c.o: ; cc -c -O -o $@@ $*.c
Certain macros are used by the default inference rules to communicate
optional arguments to any resulting compilations. In particular, `CFLAGS'
is used for
.I cc(1)
options, `FFLAGS' for
.I f77(1)
options, `PFLAGS' for
.I pc(1)
options, and `LFLAGS' and `YFLAGS' for
.I lex
and
.I yacc(1)
options. In addition, the macro `MFLAGS' is filled in with the initial
command line options supplied to
.I make.
This simplifies maintaining a hierarchy of makefiles as one may then invoke
.I make
on makefiles in subdirectories and pass along useful options such as -k.
Command lines are executed one at a time, each by its own shell. A line is
printed when it is executed unless the special target `.SILENT' is in
.I makefile,
or the first character of the command is `@@'.
Commands returning nonzero status (see
.I intro(1))
cause
.I make
to terminate unless the special target `.IGNORE' is in
.I makefile
or the command begins with <tab><hyphen>.
Interrupt and quit cause the target to be deleted unless the target is a
directory or depends on the special name `.PRECIOUS'.
Other options:
.RS +5
.HP
-i@tEquivalent to the special entry `.IGNORE:'.
.HP
-k@tWhen a command returns nonzero status, abandon work on the current
entry, but continue on branches that do not depend on the current entry.
.HP
-n@tTrace and print, but do not execute the commands needed to update the
targets.
.HP
-t@tTouch, i.e. update the modified date of targets, without executing any
commands.
.HP
-r@tEquivalent to an initial special entry `.SUFFIXES:' with no list.
.HP
-s@tEquivalent to the special entry `.SILENT:'.
.HP
-q@tQuestion up-to-dateness of target. Return exit status 1 if not;
otherwise, return 0.
.HP
-r@tDon't use built-in rules.
.RE
.SH FILES
makefile, Makefile
.SH "SEE ALSO"
sh(1), touch(1), f77(1), pc(1)
.br
S. I. Feldman
.I "Make - A Program for Maintaining Computer Programs"
.SH BUGS
Some commands return nonzero status inappropriately. Use -i
to overcome the difficulty.
Commands that are directly executed by the shell, notably
.I cd(1),
are ineffectual across newlines in
.I make.
.SH "AMIGA VERSION"
Not all of the above applies to the Amiga version of
.I make.
In particular, the default rules and suffixes are different.
Omissions:
.br
Libraries and the related notation are not implemented.
.br
The -k option is not supported.
.br
The `;' construct is not implemented.
.br
The remarks related to
.I MFLAGS, lex(1), yacc(1), f77(1)
and
.I pc(1)
do not apply.
.br
$< and $? are not exactly as specified: $< is ONE prerequisite that is out
of date (including path name), and $? is ALL prerequisites (without path
names).
Additions:
.br
If a file
.I s:builtins.make
exists, this file is used instead of the built-in rules.
.br
Filenames are not case-significant. Unfortunately, this also applies to the
special target names .PRECIOUS, .IGNORE and .SILENT. These can also be
specified as .Precious, or .iGnOrE.
.br
.I Cd
commands are effective.
.br
Comment characters (#) may be escaped with a backslash (\).
.br
At most 1 colon is allowed in a target file name (for including device
names). In that case, the trailing colon must follow the target name
immediately, without any intervening white space. Spaces in the names are
not allowed.
.br
A new special target name has been added:
.it "@.PATH.
Any prerequisite names for
.it "@.PATH
are used for finding source files for implicit rules. You name one or more
directories, and if the source file for an implicit rule cannot be found
in the current directory, each of the the given pathnames is prepended (in
the order given) to the source name, until the file is found.
For instance, the Makefile
.PATH: src/ include/ src/old
pgm: pgm.o
will look (according to the .c.o rule) for pgm.c, src/pgm.c, include/pgm.c
and src/oldpgm.c, in that order. Of course, due to other implicit rules,
other files (with other suffixes) may be tried as well.