xref: /freebsd/share/man/man5/style.Makefile.5 (revision a250a461709b786cbc73a6f5b94d7733248f59d7)
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.\"
30ef91670aSDavid E. O'Brien.Dd February 28, 2003
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
35ef91670aSDavid E. O'Brien.Nd
36ef91670aSDavid E. O'Brien.Fx
37ef91670aSDavid E. O'Brien.Pa Makefile
38ef91670aSDavid E. O'Brienfile style guide
3991c8d237SDavid E. O'Brien.Sh DESCRIPTION
40ef91670aSDavid E. O'BrienThis file specifies the preferred style for makefiles in the
4191c8d237SDavid E. O'Brien.Fx
4291c8d237SDavid E. O'Briensource tree.
43ef91670aSDavid E. O'Brien.Bl -bullet
4491c8d237SDavid E. O'Brien.It
45ef91670aSDavid E. O'BrienAll makefiles should have an SCM ID at the start of the file,
4691c8d237SDavid E. O'Brienfollowed by a blank line.
4791c8d237SDavid E. O'Brien.Bd -literal
48ef91670aSDavid E. O'Brien# $FreeBSD\&$
4991c8d237SDavid E. O'Brien
5091c8d237SDavid E. O'Brien.Ed
5191c8d237SDavid E. O'Brien.It
52ef91670aSDavid E. O'Brien.Cm .PATH :
53ef91670aSDavid E. O'Briencomes next if needed, and is spelled
54ef91670aSDavid E. O'Brien.Dq Li ".PATH: " ,
55ef91670aSDavid E. O'Brienwith a single
56ef91670aSDavid E. O'Brien.Tn ASCII
57ef91670aSDavid E. O'Brienspace after a colon.
58a250a461SDavid E. O'BrienDo not use the
59a250a461SDavid E. O'Brien.Va VPATH
60a250a461SDavid E. O'Brienvariable.
6191c8d237SDavid E. O'Brien.It
62ef91670aSDavid E. O'BrienSpecial variables (i.e.,
63ef91670aSDavid E. O'Brien.Va LIB , SRCS , MLINKS ,
64ef91670aSDavid E. O'Brienetc.) are listed in order of
65ef91670aSDavid E. O'Brien.Dq product ,
6691c8d237SDavid E. O'Brienthen building and installing a binary.
6791c8d237SDavid E. O'BrienThe general order is:
68ef91670aSDavid E. O'Brien.Va PROG Ns / Ns Va LIB Ns / Ns Va SCRIPT
6991c8d237SDavid E. O'Brien.Va FILES
7091c8d237SDavid E. O'Brien.Va LINKS
71ef91670aSDavid E. O'Brien.Oo Va NO Oc Ns Va MAN
72ef91670aSDavid E. O'Brien.Va MLINKS
7391c8d237SDavid E. O'Brien.Va INCS
74ef91670aSDavid E. O'Brien.Va SRCS
7591c8d237SDavid E. O'Brien.Va WARNS
7691c8d237SDavid E. O'Brien.Va CFLAGS
7791c8d237SDavid E. O'Brien.Va DPADD
78ef91670aSDavid E. O'Brien.Va LDADD .
7991c8d237SDavid E. O'Brien.It
8091c8d237SDavid E. O'BrienOmit
81ef91670aSDavid E. O'Brien.Va SRCS
8291c8d237SDavid E. O'Brienwhen using
83ef91670aSDavid E. O'Brien.Aq Pa bsd.prog.mk
8491c8d237SDavid E. O'Brienand there is a single source file named the same as the
8591c8d237SDavid E. O'Brien.Va PROG .
8691c8d237SDavid E. O'Brien.It
8791c8d237SDavid E. O'BrienOmit
8891c8d237SDavid E. O'Brien.Va MAN
8991c8d237SDavid E. O'Brienwhen using
90ef91670aSDavid E. O'Brien.Aq Pa bsd.prog.mk
91ef91670aSDavid E. O'Brienand the manual page is named the same as the
92ef91670aSDavid E. O'Brien.Va PROG ,
9391c8d237SDavid E. O'Brienand is in section 1.
9491c8d237SDavid E. O'Brien.It
95ef91670aSDavid E. O'BrienAll variable assignments are spelled
96ef91670aSDavid E. O'Brien.Dq Va VAR Ns Ic = ,
97ef91670aSDavid E. O'Brieni.e., no space between the variable name and the
98ef91670aSDavid E. O'Brien.Ic = .
9991c8d237SDavid E. O'BrienKeep values sorted alphabetically, if possible.
10091c8d237SDavid E. O'Brien.It
101ef91670aSDavid E. O'BrienDo not use
102ef91670aSDavid E. O'Brien.Ic +=
10391c8d237SDavid E. O'Briento set variables that are only set once
10491c8d237SDavid E. O'Brien(or to set variables for the first time).
10591c8d237SDavid E. O'Brien.It
106ef91670aSDavid E. O'BrienDo not use vertical whitespace in simple makefiles,
10791c8d237SDavid E. O'Brienbut do use it to group locally related things in more complex/longer ones.
10891c8d237SDavid E. O'Brien.It
10991c8d237SDavid E. O'Brien.Va WARNS
11091c8d237SDavid E. O'Briencomes before
11191c8d237SDavid E. O'Brien.Va CFLAGS ,
11291c8d237SDavid E. O'Brienas it is basically a
11391c8d237SDavid E. O'Brien.Va CFLAGS
11491c8d237SDavid E. O'Brienmodifier.
11591c8d237SDavid E. O'BrienIt comes before
11691c8d237SDavid E. O'Brien.Va CFLAGS
11791c8d237SDavid E. O'Brienrather than after
11891c8d237SDavid E. O'Brien.Va CFLAGS
11991c8d237SDavid E. O'Brienso it does not get lost in a sea of
12091c8d237SDavid E. O'Brien.Va CFLAGS
12191c8d237SDavid E. O'Brienstatements as
12291c8d237SDavid E. O'Brien.Va WARNS
12391c8d237SDavid E. O'Brienis an important thing.
124a250a461SDavid E. O'BrienThe usage of
125a250a461SDavid E. O'Brien.Va WARNS
126a250a461SDavid E. O'Brienis spelled
127a250a461SDavid E. O'Brien.Dq Li "WARNS?=	" .
128a250a461SDavid E. O'Brienso that it may be overriden on the command-line or in
129a250a461SDavid E. O'Brien.Pa /etc/make.conf .
13091c8d237SDavid E. O'Brien.It
131ef91670aSDavid E. O'Brien.Dq Li "NO_WERROR= yes"
132ef91670aSDavid E. O'Brienshould not be used,
133ef91670aSDavid E. O'Brienit defeats the purpose of
13491c8d237SDavid E. O'Brien.Va WARNS .
135a250a461SDavid E. O'BrienIt should only be used on the command-line and in special circomstances.
13691c8d237SDavid E. O'Brien.It
13791c8d237SDavid E. O'Brien.Va CFLAGS
13891c8d237SDavid E. O'Brienis spelled
139ef91670aSDavid E. O'Brien.Dq Li "CFLAGS+= " .
14091c8d237SDavid E. O'Brien.It
141ef91670aSDavid E. O'BrienListing
142ef91670aSDavid E. O'Brien.Fl D Ns 's
143ef91670aSDavid E. O'Brienbefore
144ef91670aSDavid E. O'Brien.Fl I Ns 's
145ef91670aSDavid E. O'Brienin
14691c8d237SDavid E. O'Brien.Va CFLAGS
147ef91670aSDavid E. O'Brienis preferred for alphabetical ordering and to make
148ef91670aSDavid E. O'Brien.Fl D Ns 's
149ef91670aSDavid E. O'Brieneasier to see.
150ef91670aSDavid E. O'BrienThe
151ef91670aSDavid E. O'Brien.Fl D Ns 's
152ef91670aSDavid E. O'Brienoften affect conditional compilation,
153ef91670aSDavid E. O'Brienand
154ef91670aSDavid E. O'Brien.Fl I Ns 's
155ef91670aSDavid E. O'Brientend to be quite long.
156a250a461SDavid E. O'BrienSplit long
157a250a461SDavid E. O'Brien.Va CFLAGS
158a250a461SDavid E. O'Briensettings between the
159a250a461SDavid E. O'Brien.Fl D Ns 's
160a250a461SDavid E. O'Brienand
161a250a461SDavid E. O'Brien.Fl I Ns 's.
16291c8d237SDavid E. O'Brien.It
163ef91670aSDavid E. O'BrienDo not use GCCisms (such as
164ef91670aSDavid E. O'Brien.Fl g
165ef91670aSDavid E. O'Brienand
166ef91670aSDavid E. O'Brien.Fl Wall )
167ef91670aSDavid E. O'Brienin
16891c8d237SDavid E. O'Brien.Va CFLAGS .
16991c8d237SDavid E. O'Brien.It
170ef91670aSDavid E. O'BrienTypically, there is one
171ef91670aSDavid E. O'Brien.Tn ASCII
172ef91670aSDavid E. O'Brientab between
173ef91670aSDavid E. O'Brien.Va VAR Ns Ic =
17491c8d237SDavid E. O'Brienand the value in order to start the value in column 9.
175ef91670aSDavid E. O'BrienAn
176ef91670aSDavid E. O'Brien.Tn ASCII
177ef91670aSDavid E. O'Brienspace is allowed for variable names that extend beyond column 9.
178ef91670aSDavid E. O'BrienA lack of whitespace is also allowed for very long variable names.
17991c8d237SDavid E. O'Brien.It
180ef91670aSDavid E. O'Brien.Ic .include Aq Pa bsd.*.mk
18191c8d237SDavid E. O'Briengoes last.
182a250a461SDavid E. O'Brien.It
183a250a461SDavid E. O'BrienDo not use anachronisms like
184a250a461SDavid E. O'Brien.Va $<
185a250a461SDavid E. O'Brienand
186a250a461SDavid E. O'Brien.Va $@ .
187a250a461SDavid E. O'BrienInstead use
188a250a461SDavid E. O'Brien.Cm ${.IMPSRC}
189a250a461SDavid E. O'Brienor
190a250a461SDavid E. O'Brien.Cm ${.ALLSRC}
191a250a461SDavid E. O'Brienand
192a250a461SDavid E. O'Brien.Cm ${.TARGET}
19391c8d237SDavid E. O'Brien.El
19491c8d237SDavid E. O'Brien.Pp
19591c8d237SDavid E. O'BrienThe desire to express a logical grouping often means not obeying some of the
19691c8d237SDavid E. O'Brienabove.
197ef91670aSDavid E. O'Brien.Sh EXAMPLE
198ef91670aSDavid E. O'BrienThe simplest program
199ef91670aSDavid E. O'Brien.Pa Makefile
200ef91670aSDavid E. O'Brienis:
201ef91670aSDavid E. O'Brien.Bd -literal -offset indent
202ef91670aSDavid E. O'Brien# $FreeBSD\&$
20391c8d237SDavid E. O'Brien
20491c8d237SDavid E. O'BrienPROG=	foo
20591c8d237SDavid E. O'Brien
20691c8d237SDavid E. O'Brien\&.include <bsd.prog.mk>
207ef91670aSDavid E. O'Brien.Ed
20891c8d237SDavid E. O'Brien.Pp
209ef91670aSDavid E. O'BrienThe simplest library
210ef91670aSDavid E. O'Brien.Pa Makefile
211ef91670aSDavid E. O'Brienis:
212ef91670aSDavid E. O'Brien.Bd -literal -offset indent
213ef91670aSDavid E. O'Brien# $FreeBSD\&$
21491c8d237SDavid E. O'Brien
21591c8d237SDavid E. O'BrienLIB=	foo
21691c8d237SDavid E. O'BrienSHLIB_MAJOR= 1
21791c8d237SDavid E. O'BrienMAN=	libfoo.3
21891c8d237SDavid E. O'BrienSRCS=	foo.c
21991c8d237SDavid E. O'Brien
22091c8d237SDavid E. O'Brien\&.include <bsd.lib.mk>
221ef91670aSDavid E. O'Brien.Ed
22291c8d237SDavid E. O'Brien.Sh SEE ALSO
223ef91670aSDavid E. O'Brien.Xr make 1 ,
22491c8d237SDavid E. O'Brien.Xr style 9
22591c8d237SDavid E. O'Brien.Sh HISTORY
226ef91670aSDavid E. O'BrienThis manual page is inspired from the same source as
22791c8d237SDavid E. O'Brien.Xr style 9
228ef91670aSDavid E. O'Brienmanual page in
22991c8d237SDavid E. O'Brien.Fx .
23091c8d237SDavid E. O'Brien.Sh BUGS
23191c8d237SDavid E. O'BrienThere are few hard and fast style rules here.
232ef91670aSDavid E. O'BrienThe style of many things is too dependent on the context of the whole makefile,
23391c8d237SDavid E. O'Brienor the lines surrounding it.
234