:man| Alphabetical   Categories   About us 
STYLE.MAKEFILE (5) | | Unix Manual Pages | :man


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 bsd.prog.mk and there is a single source file named the same as the PROG.
  • Omit MAN when using
    .In 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.
  • 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 /etc/make.conf.
  • ""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 <bsd.prog.mk>

The simplest library Makefile is:
# $FreeBSD$

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

.include <bsd.lib.mk>


make(1), style(9)




Created by Blin Media, 2008-2013