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

FreeBSD Manual Pages

  
 
  

home | help
STYLE.MAKEFILE(5)	      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.

          .PATH: comes	first if needed, and is	spelled	".PATH:	", with	a sin-
	   gle ASCII space after a colon.  Do not use the VPATH	variable.

          Special variables (i.e., LIB, SRCS, MLINKS, etc.) are listed	in or-
	   der of "product", then building and installing a  binary.   Special
	   variables  may  also	be listed in "build" order: i.e., ones for the
	   primary program (or library)	first.	The  general  "product"	 order
	   is:	PROG/[SH]LIB/SCRIPTS  FILES  LINKS  MAN	MLINKS INCS SRCS WARNS
	   CSTD	 CFLAGS	 DPADD	LDADD.	 The   general	 "build"   order   is:
	   PROG/[SH]LIB/SCRIPTS	 SRCS WARNS CSTD CFLAGS	DPADD LDADD INCS FILES
	   LINKS MAN MLINKS.

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

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

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

          Variables are expanded with {}, not ().  Such as ${VARIABLE}.

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

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

          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 over-
	   ridden on the command line or in make.conf(5).

          "MK_WERROR=no" should not be	used, it defeats the purpose of	WARNS.
	   It should only be used on the command line and in  special  circum-
	   stances.

          CFLAGS is spelled "CFLAGS+= ".

          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
	   conditional	compilation,  and  -I's	 tend to be quite long.	 Split
	   long	CFLAGS settings	between	the -D's and -I's.

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

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

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

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

          To  not  build  the	"foo" part of the base system, use NO_FOO, not
	   NOFOO.

          To optionally build something in the	base system,  spell  the  knob
	   WITH_FOO  not WANT_FOO or USE_FOO.  The latter are reserved for the
	   FreeBSD Ports Collection.

          For variables that are only checked with defined(), do not  provide
	   any fake value.

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

EXAMPLES
       The simplest program Makefile is:

	     PROG=   foo

	     .include <bsd.prog.mk>

       The simplest library Makefile is:

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

	     .include <bsd.lib.mk>

SEE ALSO
       make(1),	make.conf(5), 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
       surrounding it.

FreeBSD	14.3			 July 17, 2023		     STYLE.MAKEFILE(5)

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

home | help