Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

sh(1)

touch(1)

f77(1)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026