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 / [SH LIB / SCRIPTS
]
FILESLINKS
[NO_ MAN
]
MLINKSINCSSRCSWARNSCFLAGSDPADDLDADD
The general
``build''
order is:
PROG / [SH LIB / SCRIPTS
]
SRCSWARNSCFLAGSDPADDLDADDINCSFILESLINKS
[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.conf5.
``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.
This manual page is inspired from the same source as
style(9)
manual page in
Fx .
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.