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

FreeBSD Man Pages

Man Page or Keyword Search:
Man Architecture
Apropos Keyword Search (all sections) Output format
home | help
STYLE.MAKEFILE(5)	  FreeBSD File Formats Manual	     STYLE.MAKEFILE(5)

NAME
     style.Makefile -- FreeBSD Makefile	file style guide

DESCRIPTION
     This file specifies the preferred style for makefiles in the FreeBSD
     source tree.

     +o	 All makefiles should have an SCM ID at	the start of the file, fol-
	 lowed by a blank line.

	 # $FreeBSD$

     +o	 .PATH:	comes next if needed, and is spelled ``.PATH: '', with a sin-
	 gle ASCII space after a colon.	 Do not	use the	VPATH variable.

     +o	 Special variables (i.e., LIB, SRCS, MLINKS, etc.) are listed in order
	 of ``product'', then building and installing a	binary.	 Special vari-
	 ables may also	be listed in ``build'' order: i.e., ones for the pri-
	 mary program (or library) first.  The general ``product'' order is:
	 PROG/LIB/SCRIPT FILES LINKS [NO]MAN MLINKS INCS SRCS WARNS CFLAGS
	 DPADD LDADD.  The general ``build'' order is: PROG/LIB/SCRIPT SRCS
	 WARNS CFLAGS DPADD LDADD INCS FILES LINKS [NO]MAN MLINKS.

     +o	 Omit SRCS when	using <bsd.prog.mk> and	there is a single source file
	 named the same	as the PROG.

     +o	 Omit MAN when using <bsd.prog.mk> and the manual page is named	the
	 same as the PROG, and is in section 1.

     +o	 All variable assignments are spelled ``VAR='',	i.e., no space between
	 the variable name and the =.  Keep values sorted alphabetically, if
	 possible.

     +o	 Do not	use += to set variables	that are only set once (or to set
	 variables for the first time).

     +o	 Do not	use vertical whitespace	in simple makefiles, but do use	it to
	 group locally related things in more complex/longer ones.

     +o	 WARNS comes before CFLAGS, as it is basically a CFLAGS	modifier.  It
	 comes before CFLAGS rather than after CFLAGS so it does not get lost
	 in a sea of CFLAGS statements as WARNS	is an important	thing.	The
	 usage of WARNS	is spelled ``WARNS?= '', so that it may	be overriden
	 on the	command	line or	in /etc/make.conf.

     +o	 ``NO_WERROR= yes'' should not be used,	it defeats the purpose of
	 WARNS.	 It should only	be used	on the command line and	in special
	 circumstances.

     +o	 CFLAGS	is spelled ``CFLAGS+= ''.

     +o	 Listing -D's before -I's in CFLAGS is preferred for alphabetical
	 ordering and to make -D's easier to see.  The -D's often affect con-
	 ditional compilation, and -I's	tend to	be quite long.	Split long
	 CFLAGS	settings between the -D's and -I's.

     +o	 Do not	use GCCisms (such as -g	and -Wall) in CFLAGS.

     +o	 Typically, there is one ASCII tab between VAR=	and the	value in order
	 to start the value in column 9.  An ASCII space is allowed for	vari-
	 able names that extend	beyond column 9.  A lack of whitespace is also
	 allowed for very long variable	names.

     +o	 .include <bsd.*.mk> goes last.

     +o	 Do not	use anachronisms like $_ and $@.  Instead use ${.IMPSRC} or
	 ${.ALLSRC} and	${.TARGET}.

     The desire	to express a logical grouping often means not obeying some of
     the above.

EXAMPLE
     The simplest program Makefile is:

	   # $FreeBSD$

	   PROG=   foo

	   .include <bsd.prog.mk>

     The simplest library Makefile is:

	   # $FreeBSD$

	   LIB=	   foo
	   SHLIB_MAJOR=	1
	   MAN=	   libfoo.3
	   SRCS=   foo.c

	   .include <bsd.lib.mk>

SEE ALSO
     make(1), style(9)

HISTORY
     This manual page is inspired from the same	source as style(9) manual page
     in	FreeBSD.

BUGS
     There are few hard	and fast style rules here.  The	style of many things
     is	too dependent on the context of	the whole makefile, or the lines sur-
     rounding it.

FreeBSD	10.1		       February	28, 2003		  FreeBSD 10.1

NAME | DESCRIPTION | EXAMPLE | SEE ALSO | HISTORY | BUGS

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=style.Makefile&sektion=5&manpath=FreeBSD+5.2-RELEASE>

home | help