xref: /freebsd/share/man/man5/style.Makefile.5 (revision 37bfb9b3bfb741a2a55f425deda086d350fc9dd1)
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.\"
30*37bfb9b3SBryan Drewery.Dd October 21, 2015
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.
677b5570bfSDavid E. O'BrienSpecial variables may also be listed in
68ed403545SDavid E. O'Brien.Dq build
69ed403545SDavid E. O'Brienorder: i.e., ones for the primary program (or library) first.
70ed403545SDavid E. O'BrienThe general
71ed403545SDavid E. O'Brien.Dq product
72ed403545SDavid E. O'Brienorder is:
73b37af785SBruce Evans.Va PROG Ns / Ns Oo Va SH Oc Ns Va LIB Ns / Ns Va SCRIPTS
7491c8d237SDavid E. O'Brien.Va FILES
7591c8d237SDavid E. O'Brien.Va LINKS
76b531f2c0STom Rhodes.Oo Va NO_ Oc Ns Va MAN
77ef91670aSDavid E. O'Brien.Va MLINKS
7891c8d237SDavid E. O'Brien.Va INCS
79ef91670aSDavid E. O'Brien.Va SRCS
8091c8d237SDavid E. O'Brien.Va WARNS
8191c8d237SDavid E. O'Brien.Va CFLAGS
8291c8d237SDavid E. O'Brien.Va DPADD
83ef91670aSDavid E. O'Brien.Va LDADD .
84ed403545SDavid E. O'BrienThe general
85ed403545SDavid E. O'Brien.Dq build
86ed403545SDavid E. O'Brienorder is:
87b37af785SBruce Evans.Va PROG Ns / Ns Oo Va SH Oc Ns Va LIB Ns / Ns Va SCRIPTS
88ed403545SDavid E. O'Brien.Va SRCS
89ed403545SDavid E. O'Brien.Va WARNS
90ed403545SDavid E. O'Brien.Va CFLAGS
91ed403545SDavid E. O'Brien.Va DPADD
92ed403545SDavid E. O'Brien.Va LDADD
93ed403545SDavid E. O'Brien.Va INCS
94ed403545SDavid E. O'Brien.Va FILES
95ed403545SDavid E. O'Brien.Va LINKS
96b531f2c0STom Rhodes.Oo Va NO_ Oc Ns Va MAN
97ed403545SDavid E. O'Brien.Va MLINKS .
9891c8d237SDavid E. O'Brien.It
9991c8d237SDavid E. O'BrienOmit
100ef91670aSDavid E. O'Brien.Va SRCS
10191c8d237SDavid E. O'Brienwhen using
102fe08efe6SRuslan Ermilov.In bsd.prog.mk
10391c8d237SDavid E. O'Brienand there is a single source file named the same as the
10491c8d237SDavid E. O'Brien.Va PROG .
10591c8d237SDavid E. O'Brien.It
10691c8d237SDavid E. O'BrienOmit
10791c8d237SDavid E. O'Brien.Va MAN
10891c8d237SDavid E. O'Brienwhen using
109fe08efe6SRuslan Ermilov.In bsd.prog.mk
110ef91670aSDavid E. O'Brienand the manual page is named the same as the
111ef91670aSDavid E. O'Brien.Va PROG ,
11291c8d237SDavid E. O'Brienand is in section 1.
11391c8d237SDavid E. O'Brien.It
114ef91670aSDavid E. O'BrienAll variable assignments are spelled
115ef91670aSDavid E. O'Brien.Dq Va VAR Ns Ic = ,
116ef91670aSDavid E. O'Brieni.e., no space between the variable name and the
117ef91670aSDavid E. O'Brien.Ic = .
11891c8d237SDavid E. O'BrienKeep values sorted alphabetically, if possible.
11991c8d237SDavid E. O'Brien.It
120*37bfb9b3SBryan DreweryVariables are expanded with
121*37bfb9b3SBryan Drewery.Sy {} ,
122*37bfb9b3SBryan Drewerynot
123*37bfb9b3SBryan Drewery.Sy () .
124*37bfb9b3SBryan DrewerySuch as
125*37bfb9b3SBryan Drewery.Va ${VARIABLE} .
126*37bfb9b3SBryan Drewery.It
127ef91670aSDavid E. O'BrienDo not use
128ef91670aSDavid E. O'Brien.Ic +=
12991c8d237SDavid E. O'Briento set variables that are only set once
13091c8d237SDavid E. O'Brien(or to set variables for the first time).
13191c8d237SDavid E. O'Brien.It
132ef91670aSDavid E. O'BrienDo not use vertical whitespace in simple makefiles,
13391c8d237SDavid E. O'Brienbut do use it to group locally related things in more complex/longer ones.
13491c8d237SDavid E. O'Brien.It
13591c8d237SDavid E. O'Brien.Va WARNS
13691c8d237SDavid E. O'Briencomes before
13791c8d237SDavid E. O'Brien.Va CFLAGS ,
13891c8d237SDavid E. O'Brienas it is basically a
13991c8d237SDavid E. O'Brien.Va CFLAGS
14091c8d237SDavid E. O'Brienmodifier.
14191c8d237SDavid E. O'BrienIt comes before
14291c8d237SDavid E. O'Brien.Va CFLAGS
14391c8d237SDavid E. O'Brienrather than after
14491c8d237SDavid E. O'Brien.Va CFLAGS
14591c8d237SDavid E. O'Brienso it does not get lost in a sea of
14691c8d237SDavid E. O'Brien.Va CFLAGS
14791c8d237SDavid E. O'Brienstatements as
14891c8d237SDavid E. O'Brien.Va WARNS
14991c8d237SDavid E. O'Brienis an important thing.
150a250a461SDavid E. O'BrienThe usage of
151a250a461SDavid E. O'Brien.Va WARNS
152a250a461SDavid E. O'Brienis spelled
153e84d3134SRuslan Ermilov.Dq Li "WARNS?= " ,
1548979ef39SMike Pritchardso that it may be overridden on the command line or in
15508b91343SYaroslav Tykhiy.Xr make.conf 5 .
15691c8d237SDavid E. O'Brien.It
157ef91670aSDavid E. O'Brien.Dq Li "NO_WERROR= yes"
158ef91670aSDavid E. O'Brienshould not be used,
159ef91670aSDavid E. O'Brienit defeats the purpose of
16091c8d237SDavid E. O'Brien.Va WARNS .
1617b5570bfSDavid E. O'BrienIt should only be used on the command line and in special circumstances.
16291c8d237SDavid E. O'Brien.It
16391c8d237SDavid E. O'Brien.Va CFLAGS
16491c8d237SDavid E. O'Brienis spelled
165ef91670aSDavid E. O'Brien.Dq Li "CFLAGS+= " .
16691c8d237SDavid E. O'Brien.It
167ef91670aSDavid E. O'BrienListing
168ef91670aSDavid E. O'Brien.Fl D Ns 's
169ef91670aSDavid E. O'Brienbefore
170ef91670aSDavid E. O'Brien.Fl I Ns 's
171ef91670aSDavid E. O'Brienin
17291c8d237SDavid E. O'Brien.Va CFLAGS
173ef91670aSDavid E. O'Brienis preferred for alphabetical ordering and to make
174ef91670aSDavid E. O'Brien.Fl D Ns 's
175ef91670aSDavid E. O'Brieneasier to see.
176ef91670aSDavid E. O'BrienThe
177ef91670aSDavid E. O'Brien.Fl D Ns 's
178ef91670aSDavid E. O'Brienoften affect conditional compilation,
179ef91670aSDavid E. O'Brienand
180ef91670aSDavid E. O'Brien.Fl I Ns 's
181ef91670aSDavid E. O'Brientend to be quite long.
182a250a461SDavid E. O'BrienSplit long
183a250a461SDavid E. O'Brien.Va CFLAGS
184a250a461SDavid E. O'Briensettings between the
185a250a461SDavid E. O'Brien.Fl D Ns 's
186a250a461SDavid E. O'Brienand
187a250a461SDavid E. O'Brien.Fl I Ns 's.
18891c8d237SDavid E. O'Brien.It
189ef91670aSDavid E. O'BrienDo not use GCCisms (such as
190ef91670aSDavid E. O'Brien.Fl g
191ef91670aSDavid E. O'Brienand
192ef91670aSDavid E. O'Brien.Fl Wall )
193ef91670aSDavid E. O'Brienin
19491c8d237SDavid E. O'Brien.Va CFLAGS .
19591c8d237SDavid E. O'Brien.It
196ef91670aSDavid E. O'BrienTypically, there is one
197ef91670aSDavid E. O'Brien.Tn ASCII
198ef91670aSDavid E. O'Brientab between
199ef91670aSDavid E. O'Brien.Va VAR Ns Ic =
20091c8d237SDavid E. O'Brienand the value in order to start the value in column 9.
201ef91670aSDavid E. O'BrienAn
202ef91670aSDavid E. O'Brien.Tn ASCII
203ef91670aSDavid E. O'Brienspace is allowed for variable names that extend beyond column 9.
204ef91670aSDavid E. O'BrienA lack of whitespace is also allowed for very long variable names.
20591c8d237SDavid E. O'Brien.It
206fe08efe6SRuslan Ermilov.Ic .include In bsd.*.mk
20791c8d237SDavid E. O'Briengoes last.
208a250a461SDavid E. O'Brien.It
209a250a461SDavid E. O'BrienDo not use anachronisms like
210a250a461SDavid E. O'Brien.Va $<
211a250a461SDavid E. O'Brienand
212a250a461SDavid E. O'Brien.Va $@ .
213a250a461SDavid E. O'BrienInstead use
2147b5570bfSDavid E. O'Brien.Va ${.IMPSRC}
215a250a461SDavid E. O'Brienor
2167b5570bfSDavid E. O'Brien.Va ${.ALLSRC}
217a250a461SDavid E. O'Brienand
2187b5570bfSDavid E. O'Brien.Va ${.TARGET} .
2199146ea4eSDavid E. O'Brien.It
2209146ea4eSDavid E. O'BrienTo not build the
221db9eea4dSDavid E. O'Brien.Dq foo
2229146ea4eSDavid E. O'Brienpart of the base system,
2239146ea4eSDavid E. O'Brienuse
2249146ea4eSDavid E. O'Brien.Va NO_FOO ,
2259146ea4eSDavid E. O'Briennot
2269146ea4eSDavid E. O'Brien.Va NOFOO .
2279146ea4eSDavid E. O'Brien.It
2289146ea4eSDavid E. O'BrienTo optionally build something in the base system,
2299146ea4eSDavid E. O'Brienspell the knob
2309146ea4eSDavid E. O'Brien.Va WITH_FOO
2319146ea4eSDavid E. O'Briennot
23240f3723dSDavid E. O'Brien.Va WANT_FOO
2339146ea4eSDavid E. O'Brienor
2349146ea4eSDavid E. O'Brien.Va USE_FOO .
235db9eea4dSDavid E. O'BrienThe latter are reserved for the
236db9eea4dSDavid E. O'Brien.Fx
237db9eea4dSDavid E. O'BrienPorts Collection.
2389146ea4eSDavid E. O'Brien.It
2399146ea4eSDavid E. O'BrienFor variables that are only checked with
240db9eea4dSDavid E. O'Brien.Fn defined ,
241db9eea4dSDavid E. O'Briendo not provide any fake value.
24291c8d237SDavid E. O'Brien.El
24391c8d237SDavid E. O'Brien.Pp
24491c8d237SDavid E. O'BrienThe desire to express a logical grouping often means not obeying some of the
24591c8d237SDavid E. O'Brienabove.
246b3eaeb0bSRuslan Ermilov.Sh EXAMPLES
247ef91670aSDavid E. O'BrienThe simplest program
248ef91670aSDavid E. O'Brien.Pa Makefile
249ef91670aSDavid E. O'Brienis:
250ef91670aSDavid E. O'Brien.Bd -literal -offset indent
251ef91670aSDavid E. O'Brien# $FreeBSD\&$
25291c8d237SDavid E. O'Brien
25391c8d237SDavid E. O'BrienPROG=	foo
25491c8d237SDavid E. O'Brien
25591c8d237SDavid E. O'Brien\&.include <bsd.prog.mk>
256ef91670aSDavid E. O'Brien.Ed
25791c8d237SDavid E. O'Brien.Pp
258ef91670aSDavid E. O'BrienThe simplest library
259ef91670aSDavid E. O'Brien.Pa Makefile
260ef91670aSDavid E. O'Brienis:
261ef91670aSDavid E. O'Brien.Bd -literal -offset indent
262ef91670aSDavid E. O'Brien# $FreeBSD\&$
26391c8d237SDavid E. O'Brien
26491c8d237SDavid E. O'BrienLIB=	foo
26591c8d237SDavid E. O'BrienSHLIB_MAJOR= 1
26691c8d237SDavid E. O'BrienMAN=	libfoo.3
26791c8d237SDavid E. O'BrienSRCS=	foo.c
26891c8d237SDavid E. O'Brien
26991c8d237SDavid E. O'Brien\&.include <bsd.lib.mk>
270ef91670aSDavid E. O'Brien.Ed
27191c8d237SDavid E. O'Brien.Sh SEE ALSO
272ef91670aSDavid E. O'Brien.Xr make 1 ,
27308b91343SYaroslav Tykhiy.Xr make.conf 5 ,
27491c8d237SDavid E. O'Brien.Xr style 9
27591c8d237SDavid E. O'Brien.Sh HISTORY
276ef91670aSDavid E. O'BrienThis manual page is inspired from the same source as
27791c8d237SDavid E. O'Brien.Xr style 9
278ef91670aSDavid E. O'Brienmanual page in
27991c8d237SDavid E. O'Brien.Fx .
28091c8d237SDavid E. O'Brien.Sh BUGS
28191c8d237SDavid E. O'BrienThere are few hard and fast style rules here.
282ef91670aSDavid E. O'BrienThe style of many things is too dependent on the context of the whole makefile,
28391c8d237SDavid E. O'Brienor the lines surrounding it.
284