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.

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 parentheses are optional.

Make infers prerequisites for files for which 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

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 communicate optional arguments to any resulting compilations. In particular, `CFLAGS' is used for cc and f77(1) options, `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 terminate 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:'.

-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 executing 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)
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.