Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
MAKE(1)			    General Commands Manual		       MAKE(1)

NAME
       make -- maintain	program	dependencies

SYNOPSIS
       make   [-ABPSXeiknqrstv]	  [-C  directory]  [-D	variable]  [-d	flags]
	    [-E	 variable]  [-f	 makefile]  [-I	  directory]   [-j   max_jobs]
	    [-m	directory] [-V variable] [-x warning_options] [variable=value]
	    [target ...]

DESCRIPTION
       The  make  utility is a program designed	to simplify the	maintenance of
       other programs.	Its input is a list of specifications  describing  de-
       pendency	relationships between the generation of	files and programs.

       First  of all, the initial list of specifications will be read from the
       system makefile,	sys.mk,	unless inhibited  with	the  -r	 option.   The
       standard	 sys.mk	as shipped with	FreeBSD	also handles make.conf(5), the
       default path to which can be altered via	the make variable __MAKE_CONF.

       Then the	first of BSDmakefile, makefile,	and Makefile that can be found
       in the current directory, object	directory  (see	 .OBJDIR),  or	search
       path  (see  the -I option) will be read for the main list of dependency
       specifications.	A different makefile or	list of	them can  be  supplied
       via the -f option(s).  Finally, if the file .depend can be found	in any
       of the aforesaid	locations, it will also	be read	(see mkdep(1)).

       When  make  searches for	a makefile, its	name takes precedence over its
       location.  For instance,	BSDmakefile in the object  directory  will  be
       favored over Makefile in	the current directory.

       The options are as follows:

       -A      Make  archive  errors  non-fatal, causing make to just skip the
	       remainder or all	of the archive and continue after  printing  a
	       message.

       -B      Try  to be backwards compatible by executing a single shell per
	       command and by executing	the commands to	make the sources of  a
	       dependency  line	in sequence.  This is turned on	by default un-
	       less -j is used.

       -C directory
	       Change to directory before reading the makefiles	or doing  any-
	       thing  else.  If	multiple -C options are	specified, each	is in-
	       terpreted relative to the previous one: -C / -C etc is  equiva-
	       lent to -C /etc.

       -D variable
	       Define variable to be 1,	in the global context.

       -d flags
	       Turn  on	 debugging,  and specify which portions	of make	are to
	       print debugging information.  Argument flags is one or more  of
	       the following:

	       A       Print all possible debugging information; equivalent to
		       specifying all of the debugging flags.

	       a       Print debugging information about archive searching and
		       caching.

	       c       Print  debugging	 information about conditional evalua-
		       tion.

	       d       Print debugging information about  directory  searching
		       and caching.

	       f       Print  debugging	information about the execution	of for
		       loops.

	       g1      Print the input graph before making anything.

	       g2      Print the input graph after making everything,  or  be-
		       fore exiting on error.

	       j       Print  debugging	 information  about  running  multiple
		       shells.

	       l       Print commands in Makefiles regardless  of  whether  or
		       not  they  are  prefixed	 by  @ or other	"quiet"	flags.
		       Also known as "loud" behavior.

	       m       Print debugging information about making	 targets,  in-
		       cluding modification dates.

	       s       Print debugging information about suffix-transformation
		       rules.

	       t       Print  debugging	 information about target list mainte-
		       nance.

	       v       Print debugging information about variable assignment.

       -E variable
	       Specify a variable whose	environment value (if any) will	 over-
	       ride macro assignments within makefiles.

       -e      Specify	that  environment  values  override  macro assignments
	       within makefiles	for all	variables.

       -f makefile
	       Specify a makefile to read instead  of  the  default  one.   If
	       makefile	 is  not an absolute pathname, make will search	for it
	       as described above.  In case makefile is	`-', standard input is
	       read.  Multiple -f options can be supplied, and	the  makefiles
	       will be read in that order.

       -I directory
	       Specify	a  directory  in which to search for makefiles and in-
	       cluded makefiles.  Multiple -I options can be specified to form
	       a search	path.  The system makefile directory (or  directories,
	       see  the	 -m  option)  is automatically appended	at the tail of
	       this path.

       -i      Ignore non-zero exit of shell commands in the makefile.	Equiv-
	       alent to	specifying `-' before each command line	in  the	 make-
	       file.

       -j max_jobs
	       Specify	the  maximum number of jobs that make may have running
	       at any one time.	 Turns compatibility mode off,	unless	the  B
	       flag is also specified.

       -k      Continue	 processing  after errors are encountered, but only on
	       those targets that do not depend	on the target  whose  creation
	       caused the error.

       -m directory
	       Specify	a directory in which to	search for the system makefile
	       and makefiles included via the <...> style.   Multiple  -m  op-
	       tions  can  be specified	to form	a search path.	This path will
	       override	the default system include path,  /usr/share/mk.   The
	       system  include path will always	be appended to the search path
	       used for	"..."-style inclusions and makefile searches (see  the
	       -I option).

       -n      Display	the commands that would	have been executed, but	do not
	       actually	execute	them.

       -P      Collate the output of a given job and display it	only when  the
	       job finishes, instead of	mixing the output of parallel jobs to-
	       gether.	This option has	no effect unless -j is used too.

       -q      Do  not	execute	any commands, but exit 0 if the	specified tar-
	       gets are	up-to-date and 1, otherwise.

       -r      Do not process the system makefile.

       -S      Stop processing when an error is	encountered.   Default	behav-
	       iour.   This is needed to negate	the -k option during recursive
	       builds.

       -s      Do not echo any commands	as they	are executed.	Equivalent  to
	       specifying `@' before each command line in the makefile.

       -t      Rather  than re-building	a target as specified in the makefile,
	       create it or update its modification time to make it appear up-
	       to-date.

       -V variable
	       Print make's idea of the	value of variable, in the global  con-
	       text.   Do  not	build any targets.  Multiple instances of this
	       option may be specified;	the variables will be printed one  per
	       line, with a blank line for each	null or	undefined variable.

       -v      Be  extra  verbose.   For multi-job makes, this will cause file
	       banners to be generated.

       -X      When using the -V option	to print the values of	variables,  do
	       not recursively expand the values.

       variable=value
	       Set the value of	the variable variable to value.

       -x warning_options
	       Specify extended	warning	options.  This option may be specified
	       several	times.	 A warning_option can be prefixed with "no" in
	       which case the warning is switched off.	The  currently	avail-
	       able options are:

	       dirsyntax
		       Warn  if	anything except	blanks and comments follows an
		       .endif or .else directive.

	       See also	the .WARN special target.

       There are seven different types of lines	in a makefile: file dependency
       specifications, shell commands, variable	 assignments,  include	state-
       ments, conditional directives, for loops, and comments.

       In  general, lines may be continued from	one line to the	next by	ending
       them with a backslash (`\').  The trailing newline character  and  ini-
       tial  whitespace	 on  the  following  line are compressed into a	single
       space.

FILE DEPENDENCY	SPECIFICATIONS
       Dependency lines	consist	of one or more targets,	an operator, and  zero
       or  more	 sources.   This  creates  a  relationship  where  the targets
       "depend"	on the sources and are usually created from them.   The	 exact
       relationship between the	target and the source is determined by the op-
       erator that separates them.  The	three operators	are as follows:

       :     A	target	is  considered out-of-date if its modification time is
	     less than those of	any of its sources.  Sources for a target  ac-
	     cumulate  over  dependency	lines when this	operator is used.  The
	     target is removed if make is interrupted.

       !     Targets are always	re-created, but	not  until  all	 sources  have
	     been  examined and	re-created as necessary.  Sources for a	target
	     accumulate	over dependency	lines when this	operator is used.  The
	     target is removed if make is interrupted.

       ::    If	no sources are specified, the  target  is  always  re-created.
	     Otherwise,	 a  target  is	considered  out-of-date	 if any	of its
	     sources has been modified more recently than the target.  Sources
	     for a target do not accumulate over dependency  lines  when  this
	     operator  is used.	 The target will not be	removed	if make	is in-
	     terrupted.

       Targets and sources may contain the  shell  wildcard  expressions  `?',
       `*', `[]' and `{}'.  The	expressions `?', `*' and `[]' may only be used
       as  part	 of  the  final	component of the target	or source, and must be
       used to describe	existing files.	 The expression	`{}' need  not	neces-
       sarily  be  used	to describe existing files.  Expansion is in directory
       order, not alphabetically as done in the	shell.

SHELL COMMANDS
       Each target may have associated with it a  series  of  shell  commands,
       normally	 used  to  create  the	target.	  Each of the commands in this
       script must be preceded by a tab.  While	any target may appear on a de-
       pendency	line, only one of these	dependencies may be followed by	a cre-
       ation script, unless the	`::' operator is used.

       If the first characters of the command line are `@', `-',  and/or  `+',
       the  command  is	treated	specially.  A `@' causes the command not to be
       echoed before it	is executed.  A	`-' causes any non-zero	exit status of
       the command line	to be ignored.	A `+' causes the command  to  be  exe-
       cuted even if -n	is specified on	the command line.

VARIABLE ASSIGNMENTS
       Variables  in make are much like	variables in the shell,	and, by	tradi-
       tion, consist of	all upper-case letters.	 The five operators  that  can
       be used to assign values	to variables are as follows:

       =       Assign  the value to the	variable.  Any previous	value is over-
	       ridden.

       +=      Append the value	to the current value of	the variable.

       ?=      Assign the value	to the variable	if it is not already defined.

       :=      Assign with expansion, i.e., expand the value before  assigning
	       it  to the variable.  Normally, expansion is not	done until the
	       variable	is referenced.

       !=      Expand the value	and pass it to the shell for execution and as-
	       sign the	result to the variable.	 Any newlines  in  the	result
	       are replaced with spaces.

       Any  whitespace	before	the assigned value is removed; if the value is
       being appended, a single	space is inserted between  the	previous  con-
       tents of	the variable and the appended value.

       Variables  are  expanded	 by  surrounding the variable name with	either
       curly braces (`{}') or parentheses (`()') and preceding it with a  dol-
       lar  sign  (`$').   If the variable name	contains only a	single letter,
       the surrounding braces or parentheses are not required.	 This  shorter
       form is not recommended.

       Variable	 substitution occurs at	two distinct times, depending on where
       the variable is being used.  Variables in dependency lines are expanded
       as the line is read.  Variables in shell	commands are expanded when the
       shell command is	executed.

       The four	different classes of variables (in order of increasing	prece-
       dence) are:

       Environment variables
	       Variables defined as part of make's environment.

       Global variables
	       Variables defined in the	makefile or in included	makefiles.

       Command line variables
	       Variables defined as part of the	command	line and variables ob-
	       tained	from   the   MAKEFLAGS	environment  variable  or  the
	       .MAKEFLAGS target.

       Local variables
	       Variables that are defined specific to a	certain	 target.   The
	       seven local variables are as follows:

	       .ALLSRC	 The  list  of all sources for this target; also known
			 as `>'.

	       .ARCHIVE	 The name of the archive file; also known as `!'.

	       .IMPSRC	 The name/path of the source from which	the target  is
			 to  be	transformed (the "implied" source); also known
			 as `<'.

	       .MEMBER	 The name of the archive member; also known as `%'.

	       .OODATE	 The list of sources for this target that were	deemed
			 out-of-date; also known as `?'.

	       .PREFIX	 The file prefix of the	file, containing only the file
			 portion, no suffix or preceding directory components;
			 also known as `*'.

	       .TARGET	 The name of the target; also known as `@'.

	       The  shorter  forms  `@',  `!', `<', `%', `?', `>', and `*' are
	       permitted for backward compatibility and	are  not  recommended.
	       The  six	 variables  `@F', `@D',	`<F', `<D', `*F', and `*D' are
	       permitted for compatibility with	AT&T System V  UNIX  makefiles
	       and are not recommended.

	       Four  of	 the  local variables may be used in sources on	depen-
	       dency lines because they	expand to the proper  value  for  each
	       target  on  the	line.	These  variables are .TARGET, .PREFIX,
	       .ARCHIVE, and .MEMBER.

       In addition, make sets or knows about the following internal  variables
       or environment variables:

       $	       A single	dollar sign `$', i.e. `$$' expands to a	single
		       dollar sign.

       MAKE	       The name	that make was executed with (argv[0]).

       .CURDIR	       A  path	to the directory where make was	executed.  The
		       make utility sets .CURDIR to the	canonical  path	 given
		       by getcwd(3).

       .OBJDIR	       A  path	to  the	directory where	the targets are	built.
		       At startup, make	searches for an	alternate directory to
		       place target files.  It will  attempt  to  change  into
		       this  special  directory	and will search	this directory
		       for makefiles not found in the current directory.   The
		       following directories are tried in order:

		       1.   ${MAKEOBJDIRPREFIX}/`pwd`
		       2.   ${MAKEOBJDIR}
		       3.   obj.${MACHINE}
		       4.   obj
		       5.   /usr/obj/`pwd`

		       The first directory that	make successfully changes into
		       is  used.   If either MAKEOBJDIRPREFIX or MAKEOBJDIR is
		       set in the environment but make	is  unable  to	change
		       into  the corresponding directory, then the current di-
		       rectory is used without checking	the remainder  of  the
		       list.   If  they	 are  undefined	 and make is unable to
		       change into any of  the	remaining  three  directories,
		       then   the  current  directory  is  used.   Note,  that
		       MAKEOBJDIRPREFIX	and  MAKEOBJDIR	 must  be  environment
		       variables and should not	be set on make's command line.

		       The  make  utility  sets	 .OBJDIR to the	canonical path
		       given by	getcwd(3).

       .MAKEFILE_LIST  As make reads various makefiles,	including the  default
		       files  and  any	obtained  from	the  command  line and
		       .include	directives, their names	will be	 automatically
		       appended	 to  the  .MAKEFILE_LIST  variable.   They are
		       added right before make begins to parse them,  so  that
		       the  name  of  the current makefile is the last word in
		       this variable.

       .MAKEFLAGS      The environment variable	MAKEFLAGS may contain anything
		       that may	be specified on	make's command line.  Its con-
		       tents are stored	in make's  .MAKEFLAGS  variable.   All
		       options	and  variable  assignments specified on	make's
		       command line are	appended to  the  .MAKEFLAGS  variable
		       which is	then entered into the environment as MAKEFLAGS
		       for all programs	which make executes.  By modifying the
		       contents	of the .MAKEFLAGS variable, makefile can alter
		       the contents of the MAKEFLAGS environment variable made
		       available for all programs which	make executes; compare
		       with the	.MAKEFLAGS special target below.

		       When  passing  macro  definitions and flag arguments in
		       the MAKEFLAGS environment variable, space and tab char-
		       acters are quoted by preceding them with	 a  backslash.
		       When  reading  the MAKEFLAGS variable from the environ-
		       ment, all sequences of a	backslash and one of space  or
		       tab are replaced	just with their	second character with-
		       out  causing  a word break.  Any	other occurrences of a
		       backslash are retained.	Groups of unquoted space,  tab
		       and newline characters cause word breaking.

       MFLAGS	       This  variable  is  provided for	backward compatibility
		       and contains all	the options from the  MAKEFLAGS	 envi-
		       ronment	variable  plus any options specified on	make's
		       command line.

       .TARGETS	       List of targets make is currently building.

       .INCLUDES       See .INCLUDES special target.

       .LIBS	       See .LIBS special target.

       MACHINE	       Name of the machine architecture	make  is  running  on,
		       obtained	 from  the  MACHINE  environment  variable, or
		       through uname(3)	if not defined.

       MACHINE_ARCH    Name of the machine architecture	make was compiled for,
		       defined at compilation time.

       VPATH	       Makefiles may assign a colon-delimited list of directo-
		       ries to VPATH.  These directories will be searched  for
		       source  files by	make after it has finished parsing all
		       input makefiles.

       Variable	expansion may be modified to select or modify each word	of the
       variable	(where a "word"	is whitespace-delimited	 sequence  of  charac-
       ters).  The general format of a variable	expansion is as	follows:

	     {variable[:modifier[:...]]}

       Each  modifier  begins  with  a	colon and one of the following special
       characters.  The	colon may be escaped with a backslash (`\').

       C/pattern/replacement/[1g]
		   Modify each word of the value, substituting every match  of
		   the	extended regular expression pattern (see re_format(7))
		   with	the ed(1)-style	 replacement  string.	Normally,  the
		   first  occurrence  of the pattern in	each word of the value
		   is changed.	The `1'	modifier causes	 the  substitution  to
		   apply to at most one	word; the `g' modifier causes the sub-
		   stitution  to apply to as many instances of the search pat-
		   tern	as occur in the	word or	words it is  found  in.	  Note
		   that	 `1'  and  `g'	are  orthogonal;  the former specifies
		   whether multiple words are potentially affected, the	latter
		   whether multiple substitutions can potentially occur	within
		   each	affected word.

       E	   Replaces each word in the variable with its suffix.

       H	   Replaces each word in the variable with everything but  the
		   last	component.

       L	   Converts variable to	lower-case letters.

       Mpattern	   Select  only	 those	words that match the rest of the modi-
		   fier.  The standard shell wildcard  characters  (`*',  `?',
		   and	`[]') may be used.  The	wildcard characters may	be es-
		   caped with a	backslash (`\').

       Npattern	   This	is identical to	M, but selects all words which do  not
		   match the rest of the modifier.

       O	   Order every word in the variable alphabetically.

       Q	   Quotes  every shell meta-character in the variable, so that
		   it can be passed safely through  recursive  invocations  of
		   make.

       R	   Replaces  each word in the variable with everything but its
		   suffix.

       S/old_string/new_string/[g]
		   Modify the first occurrence of old_string in	each  word  of
		   the	variable's  value, replacing it	with new_string.  If a
		   `g' is appended to the last slash of	the pattern,  all  oc-
		   currences  in each word are replaced.  If old_string	begins
		   with	a caret	(`^'), old_string is anchored at the beginning
		   of each word.  If old_string	ends with a dollar sign	(`$'),
		   it is anchored at the end of	each word.  Inside new_string,
		   an ampersand	(`&') is replaced by old_string.  Any  charac-
		   ter	may  be	used as	a delimiter for	the parts of the modi-
		   fier	string.	 The anchoring,	ampersand, and delimiter char-
		   acters may be escaped with a	backslash (`\').

		   Variable expansion occurs in	the normal fashion inside both
		   old_string and new_string with the single exception that  a
		   backslash is	used to	prevent	the expansion of a dollar sign
		   (`$'), not a	preceding dollar sign as is usual.

       old_string=new_string
		   This	is the AT&T System V UNIX style	variable substitution.
		   It  must  be	the last modifier specified.  If old_string or
		   new_string do not contain the pattern matching character  %
		   then	 it  is	 assumed  that they are	anchored at the	end of
		   each	word, so only suffixes or  entire  words  may  be  re-
		   placed.   Otherwise	% is the substring of old_string to be
		   replaced in new_string

       T	   Replaces each word in the variable with its last component.

       U	   Converts variable to	upper-case letters.

DIRECTIVES, CONDITIONALS, AND FOR LOOPS
       Directives, conditionals, and for loops reminiscent of the  C  program-
       ming language are provided in make.  All	such structures	are identified
       by  a  line beginning with a single dot (`.') character.	 The following
       directives are supported:

       .include	<file>

       .include	"file"
	       Include the specified makefile.	Variables  between  the	 angle
	       brackets	 or  double quotes are expanded	to form	the file name.
	       If angle	brackets are used, the included	makefile  is  expected
	       to  be  in the system makefile directory.  If double quotes are
	       used, the including makefile's directory	 and  any  directories
	       specified  using	 the  -I option	are searched before the	system
	       makefile	directory.

       .undef variable
	       Un-define the specified global variable.	 Only global variables
	       may be un-defined.

       .error message
	       Terminate processing of the makefile immediately.  The filename
	       of the makefile,	the line on which the  error  was  encountered
	       and  the	 specified  message  are printed to the	standard error
	       output and make terminates with exit code 1.  Variables in  the
	       message are expanded.

       .warning	message
	       Emit a warning message.	The filename of	the makefile, the line
	       on which	the warning was	encountered, and the specified message
	       are  printed  to	 the  standard error output.  Variables	in the
	       message are expanded.

       Conditionals are	used to	determine  which  parts	 of  the  Makefile  to
       process.	  They are used	similarly to the conditionals supported	by the
       C pre-processor.	 The following conditionals are	supported:

       .if [!]expression [operator expression ...]
	       Test the	value of an expression.

       .ifdef [!]variable [operator variable ...]
	       Test the	value of a variable.

       .ifndef [!]variable [operator variable ...]
	       Test the	value of a variable.

       .ifmake [!]target [operator target ...]
	       Test the	target being built.

       .ifnmake	[!]target [operator target ...]
	       Test the	target being built.

       .else   Reverse the sense of the	last conditional.

       .elif [!]expression [operator expression	...]
	       A combination of	.else followed by .if.

       .elifdef	[!]variable [operator variable ...]
	       A combination of	.else followed by .ifdef.

       .elifndef [!]variable [operator variable	...]
	       A combination of	.else followed by .ifndef.

       .elifmake [!]target [operator target ...]
	       A combination of	.else followed by .ifmake.

       .elifnmake [!]target [operator target ...]
	       A combination of	.else followed by .ifnmake.

       .endif  End the body of the conditional.

       The operator may	be any one of the following:

       ||     logical OR

       &&     Logical AND; of higher precedence	than `||'.

       As in C,	make will only evaluate	a conditional as far as	 is  necessary
       to determine its	value.	Parentheses may	be used	to change the order of
       evaluation.   The  boolean operator `!' may be used to logically	negate
       an entire conditional.  It is of	higher precedence than `&&'.

       The value of expression may be any of the following:

       defined	   Takes a variable name as an argument	and evaluates to  true
		   if the variable has been defined.

       make	   Takes a target name as an argument and evaluates to true if
		   the	target was specified as	part of	make's command line or
		   was declared	the default target (either implicitly  or  ex-
		   plicitly,  see .MAIN) before	the line containing the	condi-
		   tional.

       empty	   Takes a variable, with possible modifiers, and evaluates to
		   true	if the expansion of the	variable would	result	in  an
		   empty string.

       exists	   Takes  a  file name as an argument and evaluates to true if
		   the file exists.  The file is searched for  on  the	system
		   search path (see .PATH).

       target	   Takes a target name as an argument and evaluates to true if
		   the target has been defined.

       An  expression may also be an arithmetic	or string comparison, with the
       left-hand side being a variable expansion.  Variable expansion is  per-
       formed on both sides of the comparison, after which the integral	values
       are  compared.  A value is interpreted as hexadecimal if	it is preceded
       by 0x, otherwise	it is decimal; octal numbers are not  supported.   The
       standard	 C  relational operators are all supported.  If	after variable
       expansion, either the left or right hand	side of	a `==' or `!='	opera-
       tor  is	not an integral	value, then string comparison is performed be-
       tween the expanded variables.  If no relational operator	is  given,  it
       is assumed that the expanded variable is	being compared against 0.

       When  make  is  evaluating one of these conditional expressions,	and it
       encounters a word it does not recognize,	either the "make" or "defined"
       expression is applied to	it, depending on the form of the  conditional.
       If  the form is .if, .ifdef or .ifndef, the "defined" expression	is ap-
       plied.  Similarly, if the form is .ifmake or .ifnmake, the  "make"  ex-
       pression	is applied.

       If  the	conditional evaluates to true the parsing of the makefile con-
       tinues as before.  If it	evaluates to false, the	 following  lines  are
       skipped.	  In  both  cases  this	 continues  until a .else or .endif is
       found.

       For loops are typically used to apply a set  of	rules  to  a  list  of
       files.  The syntax of a for loop	is:

       .for variable in	expression
       <make-rules>
       .endfor

       After the for expression	is evaluated, it is split into words.  The it-
       eration	variable  is successively set to each word, and	substituted in
       the make-rules inside the body of the for loop.

COMMENTS
       Comments	begin with a hash (`#')	character, anywhere  but  in  a	 shell
       command line, and continue to the end of	the line.

SPECIAL	SOURCES
       .IGNORE	   Ignore  any	errors	from the commands associated with this
		   target, exactly as if they all  were	 preceded  by  a  dash
		   (`-').

       .MAKE	   Execute  the	 commands  associated with this	target even if
		   the -n or -t	options	were specified.	 Normally used to mark
		   recursive make's.

       .NOTMAIN	   Normally make selects the first target it encounters	as the
		   default target to be	built  if  no  target  was  specified.
		   This	source prevents	this target from being selected.

       .OPTIONAL   If  a  target is marked with	this attribute and make	cannot
		   figure out how to create it,	it will	ignore this  fact  and
		   assume the file is not needed or already exists.

       .PRECIOUS   When	 make  is  interrupted,	 it removes any	partially made
		   targets.  This source prevents the target  from  being  re-
		   moved.

       .SILENT	   Do  not  echo any of	the commands associated	with this tar-
		   get,	exactly	as if they all were preceded  by  an  at  sign
		   (`@').

       .USE	   Turn	 the  target into make's version of a macro.  When the
		   target is used as a source for another  target,  the	 other
		   target  acquires the	commands, sources, and attributes (ex-
		   cept	for .USE) of the source.  If the  target  already  has
		   commands, the .USE target's commands	are appended to	them.

       .WAIT	   If  special	.WAIT  source is appears in a dependency line,
		   the sources that precede it are  made  before  the  sources
		   that	 succeed it in the line.  Loops	are not	being detected
		   and targets that form loops will be silently	ignored.

SPECIAL	TARGETS
       Special targets may not be included with	other targets, i.e., they must
       be the only target specified.

       .BEGIN	   Any command lines attached to this target are executed  be-
		   fore	anything else is done.

       .DEFAULT	   This	 is  sort of a .USE rule for any target	(that was used
		   only	as a source) that make cannot figure out any other way
		   to create.  Only the	shell script  is  used.	  The  .IMPSRC
		   variable  of	 a target that inherits	.DEFAULT's commands is
		   set to the target's own name.

       .END	   Any command lines attached to this target are executed  af-
		   ter everything else is done.

       .IGNORE	   Mark	each of	the sources with the .IGNORE attribute.	 If no
		   sources are specified, this is the equivalent of specifying
		   the -i option.

       .INCLUDES   A list of suffixes that indicate files that can be included
		   in  a  source  file.	 The suffix must have already been de-
		   clared with .SUFFIXES; any suffix so	declared will have the
		   directories on its search path (see .PATH)  placed  in  the
		   .INCLUDES special variable, each preceded by	a -I flag.

       .INTERRUPT  If  make  is	interrupted, the commands for this target will
		   be executed.

       .LIBS	   This	does for libraries what	 .INCLUDES  does  for  include
		   files, except that the flag used is -L.

       .MAIN	   If no target	is specified when make is invoked, this	target
		   will	 be  built.  This is always set, either	explicitly, or
		   implicitly when make	selects	the default  target,  to  give
		   the	user  a	way to refer to	the default target on the com-
		   mand	line.

       .MAKEFLAGS  This	target provides	a way to specify flags for  make  when
		   the	makefile  is  used.   The flags	are as if typed	to the
		   shell, though the -f	option will  have  no  effect.	 Flags
		   (except  for	 -f) and variable assignments specified	as the
		   source for this target are also appended to the  .MAKEFLAGS
		   internal variable.  Please note the difference between this
		   target  and the .MAKEFLAGS internal variable: specifying an
		   option or variable assignment as the	source for this	target
		   will	affect both the	current	 makefile  and	all  processes
		   that	make executes.

       .MFLAGS	   Same	as above, for backward compatibility.

       .NOTPARALLEL
		   Disable parallel mode.

       .NO_PARALLEL
		   Same	as above, for compatibility with other pmake variants.

       .ORDER	   The named targets are made in sequence.

       .PATH	   The	sources	 are  directories which	are to be searched for
		   files not found in the current directory.   If  no  sources
		   are	specified,  any	 previously  specified directories are
		   deleted.  Where possible, use of .PATH  is  preferred  over
		   use of the VPATH variable.

       .PATHsuffix
		   The	sources	 are  directories which	are to be searched for
		   suffixed files not found in	the  current  directory.   The
		   make	 utility  first	searches the suffixed search path, be-
		   fore	reverting to the default path if the file is not found
		   there.  This	form is	required for .LIBS  and	 .INCLUDES  to
		   work.

       .PHONY	   Apply  the .PHONY attribute to any specified	sources.  Tar-
		   gets	with this attribute are	always considered to be	out of
		   date.

       .PRECIOUS   Apply the .PRECIOUS attribute to any	specified sources.  If
		   no sources are specified, the .PRECIOUS  attribute  is  ap-
		   plied to every target in the	file.

       .SHELL	   Select  another shell.  The sources of this target have the
		   format key=value.  The key is one of:

		   path	      Specify the path to the new shell.

		   name	      Specify the name of the new shell.  This may  be
			      either  one of the three builtin shells (see be-
			      low) or any other	name.

		   quiet      Specify the shell	command	to turn	echoing	off.

		   echo	      Specify the shell	command	to turn	echoing	on.

		   filter     Usually shells print the echo off	command	before
			      turning echoing off.  This is the	 exact	string
			      that will	be printed by the shell	and is used to
			      filter  the  shell output	to remove the echo off
			      command.

		   echoFlag   The shell	option that turns echoing on.

		   errFlag    The shell	option to turn on error	checking.   If
			      error checking is	on, the	shell should exit if a
			      command returns a	non-zero status.

		   hasErrCtl  True if the shell	has error control.

		   check      If hasErrCtl is true then	this is	the shell com-
			      mand to turn error checking on.  If hasErrCtl is
			      false  then  this	 is a command template to echo
			      commands for which error checking	 is  disabled.
			      The template must	contain	a `%s'.

		   ignore     If  hasErrCtl is true, this is the shell command
			      to turn error checking  off.   If	 hasErrCtl  is
			      false,  this  is a command template to execute a
			      command so that errors are  ignored.   The  tem-
			      plate must contain a `%s'.

		   meta	      This  is	a  string  of  meta  characters	of the
			      shell.

		   builtins   This is a	string holding all the shell's builtin
			      commands separated  by  blanks.	The  meta  and
			      builtins	strings	are used in compat mode.  When
			      a	command	line contains neither a	meta character
			      nor starts with a	shell builtin, it is  executed
			      directly	without	invoking a shell.  When	one of
			      these strings (or	both) is  empty	 all  commands
			      are executed through a shell.

		   unsetenv   If true, remove the ENV environment variable be-
			      fore  executing any command.  This is useful for
			      the Korn-shell (ksh).

		   Values that	are  strings  must  be	surrounded  by	double
		   quotes.  Boolean values are specified as `T'	or `Y' (in ei-
		   ther	 case) to mean true.  Any other	value is taken to mean
		   false.

		   There are several uses of the .SHELL	target:

		      Selecting one of	the builtin shells.  This is  done  by
		       just  specifying	 the  name  of the shell with the name
		       keyword.	 It is also possible to	modify the  parameters
		       of  the builtin shell by	just specifying	other keywords
		       (except for path).

		      Using another executable	for one	of the builtin shells.
		       This is done by specifying the path to  the  executable
		       with  the  path	keyword.  If the last component	is the
		       same as the name	of the builtin shell, no name needs to
		       be specified; if	it is  different,  the	name  must  be
		       given:

			     .SHELL: path="/usr/local/bin/sh"

		       selects the builtin shell "sh" but will execute it from
		       /usr/local/bin/sh.   Like  in  the previous case, it is
		       possible	to modify parameters of	the builtin  shell  by
		       just specifying them.

		      Using  an  entirely  different  shell.  This is done by
		       specifying all keywords.

		   The builtin shells are  "sh",  "csh"	 and  "ksh".   Because
		   FreeBSD  has	 no  ksh  in  /bin,  it	 is  unwise to specify
		   name="ksh" without also specifying a	path.

       .SILENT	   Apply the .SILENT attribute to any specified	 sources.   If
		   no  sources are specified, the .SILENT attribute is applied
		   to every command in the file.

       .SUFFIXES   Each	source specifies a suffix to make.  If no sources  are
		   specified, any previous specified suffices are deleted.

       .WARN	   Each	 source	 specifies  a  warning	flag as	previously de-
		   scribed for the -x  command	line  option.	Warning	 flags
		   specified  on  the  command line take precedence over flags
		   specified in	the  makefile.	 Also,	command	 line  warning
		   flags  are  pushed to sub-makes through the MAKEFLAGS envi-
		   ronment variables so	that a warning flag specified  on  the
		   command  line  will influence all sub-makes.	 Several flags
		   can be specified on a single	 .WARN	target	by  seperating
		   them	with blanks.

ENVIRONMENT
       The  make utility uses the following environment	variables, if they ex-
       ist: MACHINE, MAKE, MAKEFLAGS, MAKEOBJDIR, and MAKEOBJDIRPREFIX.

FILES
       .depend			   list	of dependencies
       Makefile			   list	of dependencies
       makefile			   list	of dependencies
       obj			   object directory
       sys.mk			   system makefile
       /usr/share/mk		   default system makefile directory
       /usr/share/doc/psd/12.make  PMake tutorial
       /usr/obj			   default MAKEOBJDIRPREFIX directory.
       /etc/make.conf		   default path	to make.conf(5)

EXAMPLES
       List all	included makefiles in order visited:

	     make -V .MAKEFILE_LIST | tr \  \\n

COMPATIBILITY
       Older versions of make used MAKE	instead	of MAKEFLAGS.	This  was  re-
       moved  for  POSIX  compatibility.  The internal variable	MAKE is	set to
       the same	value as .MAKE;	support	for this may be	removed	in the future.

       Most of the more	esoteric features of make should probably  be  avoided
       for greater compatibility.

SEE ALSO
       mkdep(1), make.conf(5)

       PMake - A Tutorial.  in /usr/share/doc/psd/12.make

HISTORY
       A make command appeared in PWB UNIX.

BUGS
       The determination of .OBJDIR is contorted to the	point of absurdity.

       In the presence of several .MAIN	special	targets, make silently ignores
       all but the first.

       .TARGETS	 is not	set to the default target when make is invoked without
       a target	name and no .MAIN special target exists.

       The evaluation of expression in a test  is  very	 simple-minded.	  Cur-
       rently,	the  only form that works is `.if ${VAR} op something' For in-
       stance, you should write	tests as `.if ${VAR} ==	string'	not the	 other
       way around, which would give you	an error.

       For loops are expanded before tests, so a fragment such as:

	     .for ARCH in ${SHARED_ARCHS}
	     .if ${ARCH} == ${MACHINE}
		  ...
	     .endif
	     .endfor

       will not	work, and should be rewritten as:

	     .for ARCH in ${SHARED_ARCHS}
	     .if ${MACHINE} == ${ARCH}
		  ...
	     .endif
	     .endfor

       The parsing code	is broken with respect to handling a semicolon after a
       colon, so a fragment like this will fail:

	     HDRS=   foo.h bar.h

	     all:
	     .for h in ${HDRS:S;^;${.CURDIR}/;}
		  ...
	     .endfor

       A  trailing  backslash  in a variable value defined on the command line
       causes the delimiting space in the MAKEFLAGS environment	variable to be
       preceeded by that backslash.  That causes a submake to not  treat  that
       space  as  a  word delimiter.  Fixing this requires a larger rewrite of
       the code	handling command line macros and assignments to	.MAKEFLAGS.

GNU			       October 14, 2005			       MAKE(1)

NAME | SYNOPSIS | DESCRIPTION | FILE DEPENDENCY SPECIFICATIONS | SHELL COMMANDS | VARIABLE ASSIGNMENTS | DIRECTIVES, CONDITIONALS, AND FOR LOOPS | COMMENTS | SPECIAL SOURCES | SPECIAL TARGETS | ENVIRONMENT | FILES | EXAMPLES | COMPATIBILITY | SEE ALSO | HISTORY | BUGS

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=make&manpath=FreeBSD+6.1-RELEASE>

home | help