Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Contact Us
Online Help
Domain Status
Man Pages

Virtual Servers

Topology Map

Server Agreement
Year 2038

USA Flag



Man Pages

Manual Reference Pages  -  STYLE.MAKEFILE (5)


style.Makefile -
.Fx Makefile file style guide


See Also


This file specifies the preferred style for makefiles in the
.Fx source tree.
  • All makefiles should have an SCM ID at the start of the file, followed by a blank line.
    # $FreeBSD$

  • .PATH: comes next 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 /[SHLIB / SCRIPTS] FILES LINKS [NO_MAN] MLINKS INCS SRCS WARNS CFLAGS DPADD LDADD. The general "build" order is: PROG /[SHLIB / SCRIPTS] SRCS WARNS CFLAGS DPADD LDADD INCS FILES LINKS [NO_MAN] MLINKS.
  • Omit SRCS when using
    .In and there is a single source file named the same as the PROG.
  • Omit MAN when using
    .In 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 overridden on the command line or in make.conf(5).
  • "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.
  • 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 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 allowed for very long variable names.
  • .include In 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
    .Fx 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.


The simplest program Makefile is:
# $FreeBSD$

PROG=   foo

.include <>

The simplest library Makefile is:

# $FreeBSD$

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

.include <>


make(1), make.conf(5), style(9)


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


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.
Search for    or go to Top of page |  Section 5 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.