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 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 spec‐
       ified  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)  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 con‐
       struction commands.  For example, a ‘.c’ file may be inferred  as  pre‐
       requisite  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 accu‐
       mulate; 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 .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 com‐
       plete 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(1)  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 main‐
       taining a hierarchy of makefiles as one may then invoke make  on  make‐
       files in subdirectories and pass along useful options such as -k.

       Another special macro is ‘VPATH’.  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 will first search the current
       directory and then each of the directories on the ‘VPATH’ list.  If the
       file  is  found,  the actual path to the file will be used, rather than
       just the filename.  If ‘VPATH’ is not defined, then  only  the  current
       directory is searched.

       One  use for ‘VPATH’ is when one has several programs that compile from
       the same source.  The source can be kept in one directory and each  set
       of object files (along with a separate makefile) would be in a separate
       subdirectory.  The ‘VPATH’ macro would point 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 ‘@’.

       Commands  returning  nonzero status (see intro(1)) cause make to termi‐
       nate 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 is
       a directory or 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  cur‐
              rent  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 execut‐
              ing 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 over‐
       come 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.


4th Berkeley Distribution         May 9, 1986                          MAKE(1)
 
Generated: 2016-12-26
Generated by man2html V0.25
page hit count: 801
Valid CSS Valid XHTML 1.0 Strict