xref: /freebsd/share/man/man5/style.Makefile.5 (revision 91c8d237228eaf3fac1b4ec4183a83e13bbc6e6b)
191c8d237SDavid E. O'Brien.\" Copyright (c) 2002-2003 David O'Brien <obrien@FreeBSD.org>
291c8d237SDavid E. O'Brien.\" All rights reserved.
391c8d237SDavid E. O'Brien.\"
491c8d237SDavid E. O'Brien.\" Redistribution and use in source and binary forms, with or without
591c8d237SDavid E. O'Brien.\" modification, are permitted provided that the following conditions
691c8d237SDavid E. O'Brien.\" are met:
791c8d237SDavid E. O'Brien.\" 1. Redistributions of source code must retain the above copyright
891c8d237SDavid E. O'Brien.\"    notice, this list of conditions and the following disclaimer.
991c8d237SDavid E. O'Brien.\" 2. Redistributions in binary form must reproduce the above copyright
1091c8d237SDavid E. O'Brien.\"    notice, this list of conditions and the following disclaimer in the
1191c8d237SDavid E. O'Brien.\"    documentation and/or other materials provided with the distribution.
1291c8d237SDavid E. O'Brien.\" 3. Neither the name of the author nor the names of any contributors
1391c8d237SDavid E. O'Brien.\"    may be used to endorse or promote products derived from this software
1491c8d237SDavid E. O'Brien.\"    without specific prior written permission.
1591c8d237SDavid E. O'Brien.\"
1691c8d237SDavid E. O'Brien.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1791c8d237SDavid E. O'Brien.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1891c8d237SDavid E. O'Brien.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1991c8d237SDavid E. O'Brien.\" ARE DISCLAIMED.  IN NO EVENT SHALL DAVID O'BRIEN OR CONTRIBUTORS BE LIABLE
2091c8d237SDavid E. O'Brien.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2191c8d237SDavid E. O'Brien.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2291c8d237SDavid E. O'Brien.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2391c8d237SDavid E. O'Brien.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2491c8d237SDavid E. O'Brien.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2591c8d237SDavid E. O'Brien.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2691c8d237SDavid E. O'Brien.\" SUCH DAMAGE.
2791c8d237SDavid E. O'Brien.\"
2891c8d237SDavid E. O'Brien.\" $FreeBSD$
2991c8d237SDavid E. O'Brien.\"
3091c8d237SDavid E. O'Brien.Dd November 27, 2002
3191c8d237SDavid E. O'Brien.Dt STYLE.MAKEFILE 5
3291c8d237SDavid E. O'Brien.Os
3391c8d237SDavid E. O'Brien.Sh NAME
3491c8d237SDavid E. O'Brien.Nm style.Makefile
3591c8d237SDavid E. O'Brien.Nd "FreeBSD Makefile file style guide"
3691c8d237SDavid E. O'Brien.Sh DESCRIPTION
3791c8d237SDavid E. O'BrienThis file specifies the preferred style for Makefiles in the
3891c8d237SDavid E. O'Brien.Fx
3991c8d237SDavid E. O'Briensource tree.
4091c8d237SDavid E. O'Brien.Pp
4191c8d237SDavid E. O'Brien.Bl -bullet -compact
4291c8d237SDavid E. O'Brien.It
4391c8d237SDavid E. O'BrienAll Makefiles should have an SCM ID at the start of the file,
4491c8d237SDavid E. O'Brienfollowed by a blank line.
4591c8d237SDavid E. O'Brien.Bd -literal
4691c8d237SDavid E. O'Brien# $FreeBSD$
4791c8d237SDavid E. O'Brien
4891c8d237SDavid E. O'Brien.Ed
4991c8d237SDavid E. O'Brien.It
5091c8d237SDavid E. O'Brien\&.PATH: comes next if needed, and is spelled
5191c8d237SDavid E. O'Brien.Pa ".PATH: <ascii space>"
5291c8d237SDavid E. O'Brien.It
5391c8d237SDavid E. O'BrienSpecial variables (i.e., LIB, SRCS, MLINKS, etc..) are listed in order
5491c8d237SDavid E. O'Brienof 'product',
5591c8d237SDavid E. O'Brienthen building and installing a binary.
5691c8d237SDavid E. O'BrienThe general order is:
5791c8d237SDavid E. O'Brien.Va PROG/LIB/SCRIPT
5891c8d237SDavid E. O'Brien.Va FILES
5991c8d237SDavid E. O'Brien.Va LINKS
6091c8d237SDavid E. O'Brien.Va [NO]MAN
6191c8d237SDavid E. O'Brien.Va MLINK
6291c8d237SDavid E. O'Brien.Va INCS
6391c8d237SDavid E. O'Brien.Va SRC
6491c8d237SDavid E. O'Brien.Va WARNS
6591c8d237SDavid E. O'Brien.Va CFLAGS
6691c8d237SDavid E. O'Brien.Va DPADD
6791c8d237SDavid E. O'Brien.Va LDADD
6891c8d237SDavid E. O'Brien.It
6991c8d237SDavid E. O'BrienOmit
7091c8d237SDavid E. O'Brien.Va SRC
7191c8d237SDavid E. O'Brienwhen using
7291c8d237SDavid E. O'Brien.Pa bsd.prog.mk
7391c8d237SDavid E. O'Brienand there is a single source file named the same as the
7491c8d237SDavid E. O'Brien.Va PROG .
7591c8d237SDavid E. O'Brien.It
7691c8d237SDavid E. O'BrienOmit
7791c8d237SDavid E. O'Brien.Va MAN
7891c8d237SDavid E. O'Brienwhen using
7991c8d237SDavid E. O'Brien.Pa bsd.prog.mk
8091c8d237SDavid E. O'Brienand the man page is named the same as the
8191c8d237SDavid E. O'Brien.Va PROG
8291c8d237SDavid E. O'Brienand is in section 1.
8391c8d237SDavid E. O'Brien.It
8491c8d237SDavid E. O'BrienAll variable assignment is spelled
8591c8d237SDavid E. O'Brien.Pa "VAR=" ,
8691c8d237SDavid E. O'Brieni.e. no space between the variable name and the
8791c8d237SDavid E. O'Brien.Pa "=" .
8891c8d237SDavid E. O'BrienKeep values sorted alphabetically, if possible.
8991c8d237SDavid E. O'Brien.It
9091c8d237SDavid E. O'BrienDon't use
9191c8d237SDavid E. O'Brien.Pa "+="
9291c8d237SDavid E. O'Briento set variables that are only set once
9391c8d237SDavid E. O'Brien(or to set variables for the first time).
9491c8d237SDavid E. O'Brien.It
9591c8d237SDavid E. O'BrienDon't use vertical whitespace in simple Makefiles,
9691c8d237SDavid E. O'Brienbut do use it to group locally related things in more complex/longer ones.
9791c8d237SDavid E. O'Brien.It
9891c8d237SDavid E. O'Brien.Va WARNS
9991c8d237SDavid E. O'Briencomes before
10091c8d237SDavid E. O'Brien.Va CFLAGS ,
10191c8d237SDavid E. O'Brienas it is basically a
10291c8d237SDavid E. O'Brien.Va CFLAGS
10391c8d237SDavid E. O'Brienmodifier.
10491c8d237SDavid E. O'BrienIt comes before
10591c8d237SDavid E. O'Brien.Va CFLAGS
10691c8d237SDavid E. O'Brienrather than after
10791c8d237SDavid E. O'Brien.Va CFLAGS
10891c8d237SDavid E. O'Brienso it does not get lost in a sea of
10991c8d237SDavid E. O'Brien.Va CFLAGS
11091c8d237SDavid E. O'Brienstatements as
11191c8d237SDavid E. O'Brien.Va WARNS
11291c8d237SDavid E. O'Brienis an important thing.
11391c8d237SDavid E. O'Brien.It
11491c8d237SDavid E. O'BrienUnconditional
11591c8d237SDavid E. O'Brien.Pa "NO_WERROR=yes"
11691c8d237SDavid E. O'Brienshould not be used.
11791c8d237SDavid E. O'BrienIt defeats the purpose of
11891c8d237SDavid E. O'Brien.Va WARNS .
11991c8d237SDavid E. O'Brien.It
12091c8d237SDavid E. O'Brien.Va CFLAGS
12191c8d237SDavid E. O'Brienis spelled
12291c8d237SDavid E. O'Brien.Pa "CFLAGS+=<ascii space>" .
12391c8d237SDavid E. O'Brien.It
12491c8d237SDavid E. O'BrienListing -D's before -I's in
12591c8d237SDavid E. O'Brien.Va CFLAGS
12691c8d237SDavid E. O'Brienis preferred for alphabetical ordering and to make -D's easier to see.
12791c8d237SDavid E. O'BrienThe -D's often affect conditional compilation,
12891c8d237SDavid E. O'Brienand -I's tend to be quite long.
12991c8d237SDavid E. O'Brien.It
13091c8d237SDavid E. O'BrienDon't use GCC'isms (such as -g and -Wall) in
13191c8d237SDavid E. O'Brien.Va CFLAGS .
13291c8d237SDavid E. O'Brien.It
13391c8d237SDavid E. O'BrienTypically there is one <ascii tab> between
13491c8d237SDavid E. O'Brien.Pa "VAR="
13591c8d237SDavid E. O'Brienand the value in order to start the value in column 9.
13691c8d237SDavid E. O'BrienAn <ascii space> is allowed for VAR names that extend beyond column 9.
13791c8d237SDavid E. O'BrienA lack of whitespace also is allowed for very long VAR names.
13891c8d237SDavid E. O'Brien.Bd -literal
13991c8d237SDavid E. O'Brien.It
14091c8d237SDavid E. O'Brien".include <bsd.*.mk>"
14191c8d237SDavid E. O'Briengoes last.
14291c8d237SDavid E. O'Brien.El
14391c8d237SDavid E. O'Brien.Ed
14491c8d237SDavid E. O'Brien.Pp
14591c8d237SDavid E. O'BrienThe desire to express a logical grouping often means not obeying some of the
14691c8d237SDavid E. O'Brienabove.
14791c8d237SDavid E. O'Brien.Pp
14891c8d237SDavid E. O'BrienThe simplist program Makefile is:
14991c8d237SDavid E. O'Brien.Bd -literal
15091c8d237SDavid E. O'Brien# $FreeBSD$
15191c8d237SDavid E. O'Brien
15291c8d237SDavid E. O'BrienPROG=	foo
15391c8d237SDavid E. O'Brien
15491c8d237SDavid E. O'Brien\&.include <bsd.prog.mk>
15591c8d237SDavid E. O'Brien.Pp
15691c8d237SDavid E. O'BrienThe simplist library Makefile is:
15791c8d237SDavid E. O'Brien.Bd -literal
15891c8d237SDavid E. O'Brien# $FreeBSD$
15991c8d237SDavid E. O'Brien
16091c8d237SDavid E. O'BrienLIB=	foo
16191c8d237SDavid E. O'BrienSHLIB_MAJOR= 1
16291c8d237SDavid E. O'BrienMAN=	libfoo.3
16391c8d237SDavid E. O'BrienSRCS=	foo.c
16491c8d237SDavid E. O'Brien
16591c8d237SDavid E. O'Brien\&.include <bsd.lib.mk>
16691c8d237SDavid E. O'Brien.Pp
16791c8d237SDavid E. O'Brien.Sh SEE ALSO
16891c8d237SDavid E. O'Brien.Xr make 1
16991c8d237SDavid E. O'Brien.Xr style 9
17091c8d237SDavid E. O'Brien.Sh HISTORY
17191c8d237SDavid E. O'BrienThis man page is inspired from the same source as
17291c8d237SDavid E. O'Brien.Xr style 9
17391c8d237SDavid E. O'Brienman page in
17491c8d237SDavid E. O'Brien.Fx .
17591c8d237SDavid E. O'Brien.Sh BUGS
17691c8d237SDavid E. O'BrienThere are few hard and fast style rules here.
17791c8d237SDavid E. O'BrienThe style of many things are too dependent on the context of the whole Makefile,
17891c8d237SDavid E. O'Brienor the lines surrounding it.
179