man(1) Manual page archive


     MAKE(1)                                                   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 depen-
          dencies.  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:

     MAKE(1)                                                   MAKE(1)

               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 `.SUF-
          FIXES'; 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 prerequi-
          sites, 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 compila-
          tions.  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 char-
          acter 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.

     MAKE(1)                                                   MAKE(1)

          -t   Touch, i.e. update the modified date of targets, with-
               out 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 Pro-
          grams

     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.