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 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 single
	 ASCII space after a colon.  Do not use the VPATH variable.

     *	 Special variables (i.e., LIB, SRCS, MLINKS, etc.) are listed  in  order
	 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  possi-
	 ble.

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

     *	 Do  not use += to set variables that are only set once (or to set vari-
	 ables 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 overridden 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 circumstances.

     *	 CFLAGS is spelled "CFLAGS+= ".

     *	 Listing -D's before -I's in CFLAGS is preferred for alphabetical order-
	 ing 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 set-
	 tings 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  order
	 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 al-
	 lowed 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 style(9) manual page and first ap-
     peared in FreeBSD 5.1.

AUTHORS
     David O'Brien <deo@NUXI.org>

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 surround-
     ing it.

FreeBSD ports 15.quarterly	  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+15.1-RELEASE+and+Ports.quarterly>

home | help