Unix/Linux Go Back    

BSD 2.11 - man page for make (bsd section 1)

Linux & Unix Commands - Search Man Pages
Man Page or Keyword Search:   man
Select Man Page Set:       apropos Keyword Search (sections above)

MAKE(1) 										  MAKE(1)

       make - maintain program groups

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

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

       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

       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.

       All environment variables are assumed to be macro definitions and processed as such.   The
       environment  variables  are  processed  before any makefile 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 string1=string2 override both environment and makefile  macro  defini-

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

       The rule to create a file with suffix s2 that depends on a similarly named file with  suf-
       fix  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(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 com-
       mand line options supplied to make.  This simplifies maintaining a hierarchy of	makefiles
       as  one	may then invoke make on makefiles 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  directo-
       ries separated by colons.  When make 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

       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  sepa-
       rate  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 terminate unless	the  spe-
       cial 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:

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

       makefile, Makefile

       sh(1), touch(1), f77(1), pc(1), getenv(3)
       S. I. Feldman Make - A Program for Maintaining Computer Programs

       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.

4th Berkeley Distribution		 August 15, 1987				  MAKE(1)
Unix & Linux Commands & Man Pages : ©2000 - 2018 Unix and Linux Forums

All times are GMT -4. The time now is 01:14 AM.