xref: /freebsd/share/man/man5/style.Makefile.5 (revision 73fb7a7a7342bb590ba53e406b564df0d90c3304)
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*73fb7a7aSMateusz Piotrowski.Dd July 17, 2023
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'Brien.Cm .PATH :
46ef91670aSDavid E. O'Briencomes next if needed, and is spelled
47ef91670aSDavid E. O'Brien.Dq Li ".PATH: " ,
48ef91670aSDavid E. O'Brienwith a single
49ef91670aSDavid E. O'Brien.Tn ASCII
50ef91670aSDavid E. O'Brienspace after a colon.
51a250a461SDavid E. O'BrienDo not use the
52a250a461SDavid E. O'Brien.Va VPATH
53a250a461SDavid E. O'Brienvariable.
5491c8d237SDavid E. O'Brien.It
55ef91670aSDavid E. O'BrienSpecial variables (i.e.,
56ef91670aSDavid E. O'Brien.Va LIB , SRCS , MLINKS ,
57ef91670aSDavid E. O'Brienetc.) are listed in order of
58ef91670aSDavid E. O'Brien.Dq product ,
5991c8d237SDavid E. O'Brienthen building and installing a binary.
607b5570bfSDavid E. O'BrienSpecial variables may also be listed in
61ed403545SDavid E. O'Brien.Dq build
62ed403545SDavid E. O'Brienorder: i.e., ones for the primary program (or library) first.
63ed403545SDavid E. O'BrienThe general
64ed403545SDavid E. O'Brien.Dq product
65ed403545SDavid E. O'Brienorder is:
66b37af785SBruce Evans.Va PROG Ns / Ns Oo Va SH Oc Ns Va LIB Ns / Ns Va SCRIPTS
6791c8d237SDavid E. O'Brien.Va FILES
6891c8d237SDavid E. O'Brien.Va LINKS
69*73fb7a7aSMateusz Piotrowski.Va MAN
70ef91670aSDavid E. O'Brien.Va MLINKS
7191c8d237SDavid E. O'Brien.Va INCS
72ef91670aSDavid E. O'Brien.Va SRCS
7391c8d237SDavid E. O'Brien.Va WARNS
746b3a148cSAlex Richardson.Va CSTD
7591c8d237SDavid E. O'Brien.Va CFLAGS
7691c8d237SDavid E. O'Brien.Va DPADD
77ef91670aSDavid E. O'Brien.Va LDADD .
78ed403545SDavid E. O'BrienThe general
79ed403545SDavid E. O'Brien.Dq build
80ed403545SDavid E. O'Brienorder is:
81b37af785SBruce Evans.Va PROG Ns / Ns Oo Va SH Oc Ns Va LIB Ns / Ns Va SCRIPTS
82ed403545SDavid E. O'Brien.Va SRCS
83ed403545SDavid E. O'Brien.Va WARNS
846b3a148cSAlex Richardson.Va CSTD
85ed403545SDavid E. O'Brien.Va CFLAGS
86ed403545SDavid E. O'Brien.Va DPADD
87ed403545SDavid E. O'Brien.Va LDADD
88ed403545SDavid E. O'Brien.Va INCS
89ed403545SDavid E. O'Brien.Va FILES
90ed403545SDavid E. O'Brien.Va LINKS
91*73fb7a7aSMateusz Piotrowski.Va MAN
92ed403545SDavid E. O'Brien.Va MLINKS .
9391c8d237SDavid E. O'Brien.It
9491c8d237SDavid E. O'BrienOmit
95ef91670aSDavid E. O'Brien.Va SRCS
9691c8d237SDavid E. O'Brienwhen using
97fe08efe6SRuslan Ermilov.In bsd.prog.mk
9891c8d237SDavid E. O'Brienand there is a single source file named the same as the
9991c8d237SDavid E. O'Brien.Va PROG .
10091c8d237SDavid E. O'Brien.It
10191c8d237SDavid E. O'BrienOmit
10291c8d237SDavid E. O'Brien.Va MAN
10391c8d237SDavid E. O'Brienwhen using
104fe08efe6SRuslan Ermilov.In bsd.prog.mk
105ef91670aSDavid E. O'Brienand the manual page is named the same as the
106ef91670aSDavid E. O'Brien.Va PROG ,
10791c8d237SDavid E. O'Brienand is in section 1.
10891c8d237SDavid E. O'Brien.It
109ef91670aSDavid E. O'BrienAll variable assignments are spelled
110ef91670aSDavid E. O'Brien.Dq Va VAR Ns Ic = ,
111ef91670aSDavid E. O'Brieni.e., no space between the variable name and the
112ef91670aSDavid E. O'Brien.Ic = .
11391c8d237SDavid E. O'BrienKeep values sorted alphabetically, if possible.
11491c8d237SDavid E. O'Brien.It
11537bfb9b3SBryan DreweryVariables are expanded with
11637bfb9b3SBryan Drewery.Sy {} ,
11737bfb9b3SBryan Drewerynot
11837bfb9b3SBryan Drewery.Sy () .
11937bfb9b3SBryan DrewerySuch as
12037bfb9b3SBryan Drewery.Va ${VARIABLE} .
12137bfb9b3SBryan Drewery.It
122ef91670aSDavid E. O'BrienDo not use
123ef91670aSDavid E. O'Brien.Ic +=
12491c8d237SDavid E. O'Briento set variables that are only set once
12591c8d237SDavid E. O'Brien(or to set variables for the first time).
12691c8d237SDavid E. O'Brien.It
127ef91670aSDavid E. O'BrienDo not use vertical whitespace in simple makefiles,
12891c8d237SDavid E. O'Brienbut do use it to group locally related things in more complex/longer ones.
12991c8d237SDavid E. O'Brien.It
13091c8d237SDavid E. O'Brien.Va WARNS
13191c8d237SDavid E. O'Briencomes before
13291c8d237SDavid E. O'Brien.Va CFLAGS ,
13391c8d237SDavid E. O'Brienas it is basically a
13491c8d237SDavid E. O'Brien.Va CFLAGS
13591c8d237SDavid E. O'Brienmodifier.
13691c8d237SDavid E. O'BrienIt comes before
13791c8d237SDavid E. O'Brien.Va CFLAGS
13891c8d237SDavid E. O'Brienrather than after
13991c8d237SDavid E. O'Brien.Va CFLAGS
14091c8d237SDavid E. O'Brienso it does not get lost in a sea of
14191c8d237SDavid E. O'Brien.Va CFLAGS
14291c8d237SDavid E. O'Brienstatements as
14391c8d237SDavid E. O'Brien.Va WARNS
14491c8d237SDavid E. O'Brienis an important thing.
145a250a461SDavid E. O'BrienThe usage of
146a250a461SDavid E. O'Brien.Va WARNS
147a250a461SDavid E. O'Brienis spelled
148e84d3134SRuslan Ermilov.Dq Li "WARNS?= " ,
1498979ef39SMike Pritchardso that it may be overridden on the command line or in
15008b91343SYaroslav Tykhiy.Xr make.conf 5 .
15191c8d237SDavid E. O'Brien.It
1527fa2f2a6SAlex Richardson.Dq Li "MK_WERROR=no"
153ef91670aSDavid E. O'Brienshould not be used,
154ef91670aSDavid E. O'Brienit defeats the purpose of
15591c8d237SDavid E. O'Brien.Va WARNS .
1567b5570bfSDavid E. O'BrienIt should only be used on the command line and in special circumstances.
15791c8d237SDavid E. O'Brien.It
15891c8d237SDavid E. O'Brien.Va CFLAGS
15991c8d237SDavid E. O'Brienis spelled
160ef91670aSDavid E. O'Brien.Dq Li "CFLAGS+= " .
16191c8d237SDavid E. O'Brien.It
162ef91670aSDavid E. O'BrienListing
163ef91670aSDavid E. O'Brien.Fl D Ns 's
164ef91670aSDavid E. O'Brienbefore
165ef91670aSDavid E. O'Brien.Fl I Ns 's
166ef91670aSDavid E. O'Brienin
16791c8d237SDavid E. O'Brien.Va CFLAGS
168ef91670aSDavid E. O'Brienis preferred for alphabetical ordering and to make
169ef91670aSDavid E. O'Brien.Fl D Ns 's
170ef91670aSDavid E. O'Brieneasier to see.
171ef91670aSDavid E. O'BrienThe
172ef91670aSDavid E. O'Brien.Fl D Ns 's
173ef91670aSDavid E. O'Brienoften affect conditional compilation,
174ef91670aSDavid E. O'Brienand
175ef91670aSDavid E. O'Brien.Fl I Ns 's
176ef91670aSDavid E. O'Brientend to be quite long.
177a250a461SDavid E. O'BrienSplit long
178a250a461SDavid E. O'Brien.Va CFLAGS
179a250a461SDavid E. O'Briensettings between the
180a250a461SDavid E. O'Brien.Fl D Ns 's
181a250a461SDavid E. O'Brienand
182a250a461SDavid E. O'Brien.Fl I Ns 's.
18391c8d237SDavid E. O'Brien.It
184ef91670aSDavid E. O'BrienDo not use GCCisms (such as
185ef91670aSDavid E. O'Brien.Fl g
186ef91670aSDavid E. O'Brienand
187ef91670aSDavid E. O'Brien.Fl Wall )
188ef91670aSDavid E. O'Brienin
18991c8d237SDavid E. O'Brien.Va CFLAGS .
19091c8d237SDavid E. O'Brien.It
191ef91670aSDavid E. O'BrienTypically, there is one
192ef91670aSDavid E. O'Brien.Tn ASCII
193ef91670aSDavid E. O'Brientab between
194ef91670aSDavid E. O'Brien.Va VAR Ns Ic =
19591c8d237SDavid E. O'Brienand the value in order to start the value in column 9.
196ef91670aSDavid E. O'BrienAn
197ef91670aSDavid E. O'Brien.Tn ASCII
198ef91670aSDavid E. O'Brienspace is allowed for variable names that extend beyond column 9.
199ef91670aSDavid E. O'BrienA lack of whitespace is also allowed for very long variable names.
20091c8d237SDavid E. O'Brien.It
201fe08efe6SRuslan Ermilov.Ic .include In bsd.*.mk
20291c8d237SDavid E. O'Briengoes last.
203a250a461SDavid E. O'Brien.It
204a250a461SDavid E. O'BrienDo not use anachronisms like
205a250a461SDavid E. O'Brien.Va $<
206a250a461SDavid E. O'Brienand
207a250a461SDavid E. O'Brien.Va $@ .
208a250a461SDavid E. O'BrienInstead use
2097b5570bfSDavid E. O'Brien.Va ${.IMPSRC}
210a250a461SDavid E. O'Brienor
2117b5570bfSDavid E. O'Brien.Va ${.ALLSRC}
212a250a461SDavid E. O'Brienand
2137b5570bfSDavid E. O'Brien.Va ${.TARGET} .
2149146ea4eSDavid E. O'Brien.It
2159146ea4eSDavid E. O'BrienTo not build the
216db9eea4dSDavid E. O'Brien.Dq foo
2179146ea4eSDavid E. O'Brienpart of the base system,
2189146ea4eSDavid E. O'Brienuse
2199146ea4eSDavid E. O'Brien.Va NO_FOO ,
2209146ea4eSDavid E. O'Briennot
2219146ea4eSDavid E. O'Brien.Va NOFOO .
2229146ea4eSDavid E. O'Brien.It
2239146ea4eSDavid E. O'BrienTo optionally build something in the base system,
2249146ea4eSDavid E. O'Brienspell the knob
2259146ea4eSDavid E. O'Brien.Va WITH_FOO
2269146ea4eSDavid E. O'Briennot
22740f3723dSDavid E. O'Brien.Va WANT_FOO
2289146ea4eSDavid E. O'Brienor
2299146ea4eSDavid E. O'Brien.Va USE_FOO .
230db9eea4dSDavid E. O'BrienThe latter are reserved for the
231db9eea4dSDavid E. O'Brien.Fx
232db9eea4dSDavid E. O'BrienPorts Collection.
2339146ea4eSDavid E. O'Brien.It
2349146ea4eSDavid E. O'BrienFor variables that are only checked with
235db9eea4dSDavid E. O'Brien.Fn defined ,
236db9eea4dSDavid E. O'Briendo not provide any fake value.
23791c8d237SDavid E. O'Brien.El
23891c8d237SDavid E. O'Brien.Pp
23991c8d237SDavid E. O'BrienThe desire to express a logical grouping often means not obeying some of the
24091c8d237SDavid E. O'Brienabove.
241b3eaeb0bSRuslan Ermilov.Sh EXAMPLES
242ef91670aSDavid E. O'BrienThe simplest program
243ef91670aSDavid E. O'Brien.Pa Makefile
244ef91670aSDavid E. O'Brienis:
245ef91670aSDavid E. O'Brien.Bd -literal -offset indent
246ef91670aSDavid E. O'Brien# $FreeBSD\&$
24791c8d237SDavid E. O'Brien
24891c8d237SDavid E. O'BrienPROG=	foo
24991c8d237SDavid E. O'Brien
25091c8d237SDavid E. O'Brien\&.include <bsd.prog.mk>
251ef91670aSDavid E. O'Brien.Ed
25291c8d237SDavid E. O'Brien.Pp
253ef91670aSDavid E. O'BrienThe simplest library
254ef91670aSDavid E. O'Brien.Pa Makefile
255ef91670aSDavid E. O'Brienis:
256ef91670aSDavid E. O'Brien.Bd -literal -offset indent
257ef91670aSDavid E. O'Brien# $FreeBSD\&$
25891c8d237SDavid E. O'Brien
25991c8d237SDavid E. O'BrienLIB=	foo
26091c8d237SDavid E. O'BrienSHLIB_MAJOR= 1
26191c8d237SDavid E. O'BrienMAN=	libfoo.3
26291c8d237SDavid E. O'BrienSRCS=	foo.c
26391c8d237SDavid E. O'Brien
26491c8d237SDavid E. O'Brien\&.include <bsd.lib.mk>
265ef91670aSDavid E. O'Brien.Ed
26691c8d237SDavid E. O'Brien.Sh SEE ALSO
267ef91670aSDavid E. O'Brien.Xr make 1 ,
26808b91343SYaroslav Tykhiy.Xr make.conf 5 ,
26991c8d237SDavid E. O'Brien.Xr style 9
27091c8d237SDavid E. O'Brien.Sh HISTORY
271ef91670aSDavid E. O'BrienThis manual page is inspired from the same source as
27291c8d237SDavid E. O'Brien.Xr style 9
273ef91670aSDavid E. O'Brienmanual page in
27491c8d237SDavid E. O'Brien.Fx .
27591c8d237SDavid E. O'Brien.Sh BUGS
27691c8d237SDavid E. O'BrienThere are few hard and fast style rules here.
277ef91670aSDavid E. O'BrienThe style of many things is too dependent on the context of the whole makefile,
27891c8d237SDavid E. O'Brienor the lines surrounding it.
279