


MAKE(1)             UNIX Programmer's Manual		  MAKE(1)



NAME
     make - maintain program groups

SYNOPSIS
     make [ -f makefile ] [ option ] ...  file ...

DESCRIPTION
     _M_a_k_e executes commands in _m_a_k_e_f_i_l_e to update one or more
     target _n_a_m_e_s.  _N_a_m_e is typically a program.  If no -f option
     is present, `makefile' and `Makefile' are tried in order.
     If _m_a_k_e_f_i_l_e is `-', the standard input is taken.  More than
     one -f option may appear.

     _M_a_k_e 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.

     _M_a_k_e_f_i_l_e 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.  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 com-
     mand sequence may be specified for it.  If a name appears on
     a line with a double colon :: then the command sequence fol-
     lowing 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.

     The special form of the name: _a(_b) means the file named _b
     stored in the archive named _a.

     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

     _M_a_k_e_f_i_l_e entries of the form

	  string1 = string2




Printed 11/26/99	 August 15, 1987			1






MAKE(1)             UNIX Programmer's Manual		  MAKE(1)



     are macro definitions.  Subsequent appearances of $(_s_t_r_i_n_g_1)
     or ${_s_t_r_i_n_g_1} are replaced by _s_t_r_i_n_g_2.  If _s_t_r_i_n_g_1 is a sin-
     gle character, the parentheses or braces are optional.

     All environment variables are assumed to be macro defini-
     tions and processed as such.  The environment variables are
     processed before any _m_a_k_e_f_i_l_e macro definitions; thus, macro
     assignments in a makefile override environmental variables.
     The -e option causes the environment to override the macro
     assignments in a makefile.  Finally, command line options of
     the form _s_t_r_i_n_g_1=_s_t_r_i_n_g_2 override both environment and
     makefile macro definitions.

     _M_a_k_e infers prerequisites for files for which _m_a_k_e_f_i_l_e 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 `.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 .p

     The rule to create a file with suffix _s_2 that depends on a
     similarly named file with suffix _s_1 is specified as an entry
     for the `target' _s_1_s_2.  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 prere-
     quisites, 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 _c_c(1) options,
     `FFLAGS' for _f_7_7(1) options, `PFLAGS' for _p_c(1) options, and
     `LFLAGS' and `YFLAGS' for _l_e_x and _y_a_c_c(1) options.  In addi-
     tion, the macro `MFLAGS' is filled in with the initial com-
     mand line options supplied to _m_a_k_e.  This simplifies main-
     taining a hierarchy of makefiles as one may then invoke _m_a_k_e
     on makefiles in subdirectories and pass along useful options



Printed 11/26/99	 August 15, 1987			2






MAKE(1)             UNIX Programmer's Manual		  MAKE(1)



     such as -k.

     Another special macro is `VPATH'.	The `VPATH' macro should
     be set to a list of directories separated by colons.  When
     _m_a_k_e searches for a file as a result of a dependency rela-
     tion, 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 _m_a_k_e_f_i_l_e) 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 _m_a_k_e_f_i_l_e, or the first char-
     acter of the command is `@'.

     Commands returning nonzero status (see _i_n_t_r_o(1)) cause _m_a_k_e
     to terminate unless the special target `.IGNORE' is in
     _m_a_k_e_f_i_l_e 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 `.PRE-
     CIOUS'.

     Other options:

     -e   Environmental variables override assignments within
	  makefiles.

     -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:'.



Printed 11/26/99	 August 15, 1987			3






MAKE(1)             UNIX Programmer's Manual		  MAKE(1)



FILES
     makefile, Makefile

SEE ALSO
     sh(1), touch(1), f77(1), pc(1), getenv(3)
     S. I. Feldman _M_a_k_e - _A _P_r_o_g_r_a_m _f_o_r _M_a_i_n_t_a_i_n_i_n_g _C_o_m_p_u_t_e_r _P_r_o_-
     _g_r_a_m_s

BUGS
     Some commands return nonzero status inappropriately.  Use -i
     to overcome the difficulty.
     Commands that are directly executed by the shell, notably
     _c_d(1), are ineffectual across newlines in _m_a_k_e.

     `VPATH' is intended to act like the System V `VPATH' sup-
     port, but there is no guarantee that it functions identi-
     cally.






































Printed 11/26/99	 August 15, 1987			4



