MAKE(1) BSD 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 specified as a dash (-),
make uses the standard input. More than one -f option can appear.
make updates a target if it depends on prerequisite files that were
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, it depends on all the names to the right of the
colon on those lines, but only one command sequence can be specified for
it. If a name appears on a line with a double colon (::), 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.
Comments begin with a pound sign (#) and end with a newline. Note that a
pound sign is treated as a comment character, whether surrounded by
quotation marks or not, wherever it appears (except when it is embedded
in a command).
Makefile entries of the form
string1 = string2
are macro definitions. Subsequent appearances of $(string1) or
${string1} are replaced by string2. If string1 is a single character,
the parentheses or braces are optional.
make infers prerequisites for files for which makefile gives no
construction commands (see Examples, below). 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 .r .f .y .l .s .p .pas .h
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
the 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 cc(1) options; FFLAGS for f77(1) options; PFLAGS for pc
options; and LFLAGS and YFLAGS for lex and yacc(1) options. In addition,
the macro MFLAGS is filled in with the initial command line options
supplied to make. This simplifies maintaining a hierarchy of makefiles
because you can then invoke make on makefiles in subdirectories and pass
along useful options such as -k.
VPATH is another special macro. The VPATH macro should be set to a list
of directories separated by colons. When make searches for a file as a
result of a dependency relation, it first searches the current directory
and then each of the directories on the VPATH list. If it finds the
file, it uses the actual path to the file, rather than just the filename.
If VPATH is not defined, make searches only the current directory.
Use VPATH when you have several programs that compile from the same
source. You can keep the source in one directory and each set of object
files (along with a separate makefile) in a separate subdirectory. The
VPATH macro points to the source directory in this case.
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 an at sign (@).
Commands returning nonzero status (see intro(1)) cause make to terminate
unless the special target .IGNORE is in makefile or the command begins
with <tab><hyphen>.
Interrupt and quit delete the target unless it is a directory or depends
on the special name .PRECIOUS.
OPTIONS
-i Ignore error codes returned by invoked commands. This option
is equivalent to the special entry .IGNORE:.
-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, that is, update the modified date of targets, without
executing any commands.
-r Do not use built-in rules. This option is equivalent to an
initial special entry .SUFFIXES: with no list.
-s Do not print command lines before executing. This option is
equivalent to the special entry .SILENT:.
EXAMPLES
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
A .c file can be inferred as prerequisite for a .o file and be compiled
to produce the .o file. Thus, the preceding example can be shortened:
pgm: a.o b.o
cc a.o b.o -lm -o pgm
a.o b.o: incl
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.
VPATH is intended to act like the System V VPATH support, but there is no
guarantee that it functions identically.
FILES
makefile, Makefile
SEE ALSO
sh(1), touch(1), f77(1)
S. I. Feldman Make - A Program for Maintaining Computer Programs