|
STYLE.MAKEFILE(5)
Contents
|
style.Makefile -- FreeBSD Makefile file style guide
This file specifies the preferred style for makefiles in the FreeBSD
source tree.
+o All makefiles should have an SCM ID at the start of the file, followed
by a blank line.
# $FreeBSD$
+o .PATH: comes next if needed, and is spelled ``.PATH: '', with a single
ASCII space after a colon. Do not use the VPATH variable.
+o 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/LIB/SCRIPT FILES LINKS [NO]MAN MLINKS INCS SRCS WARNS CFLAGS
DPADD LDADD. The general ``build'' order is: PROG/LIB/SCRIPT SRCS
WARNS CFLAGS DPADD LDADD INCS FILES LINKS [NO]MAN MLINKS.
+o Omit SRCS when using <bsd.prog.mk> and there is a single source file
named the same as the PROG.
+o Omit MAN when using <bsd.prog.mk> and the manual page is named the
same as the PROG, and is in section 1.
+o All variable assignments are spelled ``VAR='', i.e., no space between
the variable name and the =. Keep values sorted alphabetically, if
possible.
+o Do not use += to set variables that are only set once (or to set
variables for the first time).
+o Do not use vertical whitespace in simple makefiles, but do use it to
group locally related things in more complex/longer ones.
+o 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 overriden
on the command line or in /etc/make.conf.
+o ``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.
+o CFLAGS is spelled ``CFLAGS+= ''.
+o 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.
+o Do not use GCCisms (such as -g and -Wall) in CFLAGS.
+o 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.
+o .include <bsd.*.mk> goes last.
+o Do not use anachronisms like $< and $@. Instead use ${.IMPSRC} or
${.ALLSRC} and ${.TARGET}.
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
SHLIB_MAJOR= 1
MAN= libfoo.3
SRCS= foo.c
.include <bsd.lib.mk>
make(1), style(9)
This manual page is inspired from the same source as style(9) manual page
in FreeBSD.
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.
FreeBSD 5.2.1 February 28, 2003 FreeBSD 5.2.1 [ Back ] |