MAKE(1) GENIX Programmer's Manual MAKE(1)
NAME
make - maintain program groups
SYNOPSIS
make [ -f makefile ] [ option ] ... file ...
DESCRIPTION
Make executes commands in makefile to update one or more target
names. Name is typically a program. If no -f option is present,
`makefile' and `Makefile' are tried in order. If makefile is `-',
the standard input is taken. More than one -f option may appear
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.
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 a(b) means
the file named b stored in the archive named a. A name like a((b))
means the file stored in archive a containing the entry point 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
Makefile entries of the form
string1 = string2
are macro definitions. Subsequent appearances of $(string1) are
replaced by string2. If string1 is a single character, the
Printed 11/16/83 1
MAKE(1) GENIX Programmer's Manual MAKE(1)
parentheses are optional.
Make infers prerequisites for files for which makefile gives no con-
struction 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 signi-
ficant; 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 s2 that depends on a similarly
named file with suffix s1 is specified as an entry for the `target'
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 communi-
cate optional arguments to any resulting compilations. In particu-
lar, `CFLAGS' is used for cc(1) options, `FFLAGS' for f77(1)
options, `PFLAGS' for pc(1) options, and `LFLAGS' and `YFLAGS' for
lex and yacc(1) options.
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 makefile, or the first character of the command is
`@'.
Commands returning nonzero status (see intro(1)) cause make to ter-
minate unless the special target `.IGNORE' is in makefile or the
command begins with <tab><hyphen>.
Interrupt and quit cause the target to be deleted unless the target
depends on the special name `.PRECIOUS'.
Other options:
-i Equivalent to the special entry `.IGNORE:'.
Printed 11/16/83 2
MAKE(1) GENIX Programmer's Manual MAKE(1)
-k When a command returns nonzero status, abandon work on the
current entry, but continue on branches that do not depend on
the current entry.
-n Trace and print, but do not execute the commands needed to
update the targets.
-t Touch, i.e. update the modified date of targets, without exe-
cuting any commands.
-r Equivalent to an initial special entry `.SUFFIXES:' with no
list.
-s Equivalent to the special entry `.SILENT:'.
FILES
makefile, Makefile
SEE ALSO
sh(1), touch(1), f77(1), pc(1)
S. I. Feldman Make - A Program for Maintaining Computer Programs
BUGS
Some commands return nonzero status inappropriately. Use -i to
overcome the difficulty.
Commands that are directly executed by the shell, notably cd(1), are
ineffectual across newlines in make.
Printed 11/16/83 3