STYLE.MAKEFILE
DESCRIPTION
This file specifies the preferred style for makefiles in the 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
#include <bsd.prog.mk>
and there is a single source file named the same as the PROG. - Omit
MAN
when using
#include <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 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#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 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.
Comments