xref: /freebsd/share/man/man5/style.Makefile.5 (revision 6b3a148c52ac585d5d2b3d76de6b9b6fc9a96465)
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*6b3a148cSAlex Richardson.Dd August 25, 2020
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
81*6b3a148cSAlex Richardson.Va CSTD
8291c8d237SDavid E. O'Brien.Va CFLAGS
8391c8d237SDavid E. O'Brien.Va DPADD
84ef91670aSDavid E. O'Brien.Va LDADD .
85ed403545SDavid E. O'BrienThe general
86ed403545SDavid E. O'Brien.Dq build
87ed403545SDavid E. O'Brienorder is:
88b37af785SBruce Evans.Va PROG Ns / Ns Oo Va SH Oc Ns Va LIB Ns / Ns Va SCRIPTS
89ed403545SDavid E. O'Brien.Va SRCS
90ed403545SDavid E. O'Brien.Va WARNS
91*6b3a148cSAlex Richardson.Va CSTD
92ed403545SDavid E. O'Brien.Va CFLAGS
93ed403545SDavid E. O'Brien.Va DPADD
94ed403545SDavid E. O'Brien.Va LDADD
95ed403545SDavid E. O'Brien.Va INCS
96ed403545SDavid E. O'Brien.Va FILES
97ed403545SDavid E. O'Brien.Va LINKS
98b531f2c0STom Rhodes.Oo Va NO_ Oc Ns Va MAN
99ed403545SDavid E. O'Brien.Va MLINKS .
10091c8d237SDavid E. O'Brien.It
10191c8d237SDavid E. O'BrienOmit
102ef91670aSDavid E. O'Brien.Va SRCS
10391c8d237SDavid E. O'Brienwhen using
104fe08efe6SRuslan Ermilov.In bsd.prog.mk
10591c8d237SDavid E. O'Brienand there is a single source file named the same as the
10691c8d237SDavid E. O'Brien.Va PROG .
10791c8d237SDavid E. O'Brien.It
10891c8d237SDavid E. O'BrienOmit
10991c8d237SDavid E. O'Brien.Va MAN
11091c8d237SDavid E. O'Brienwhen using
111fe08efe6SRuslan Ermilov.In bsd.prog.mk
112ef91670aSDavid E. O'Brienand the manual page is named the same as the
113ef91670aSDavid E. O'Brien.Va PROG ,
11491c8d237SDavid E. O'Brienand is in section 1.
11591c8d237SDavid E. O'Brien.It
116ef91670aSDavid E. O'BrienAll variable assignments are spelled
117ef91670aSDavid E. O'Brien.Dq Va VAR Ns Ic = ,
118ef91670aSDavid E. O'Brieni.e., no space between the variable name and the
119ef91670aSDavid E. O'Brien.Ic = .
12091c8d237SDavid E. O'BrienKeep values sorted alphabetically, if possible.
12191c8d237SDavid E. O'Brien.It
12237bfb9b3SBryan DreweryVariables are expanded with
12337bfb9b3SBryan Drewery.Sy {} ,
12437bfb9b3SBryan Drewerynot
12537bfb9b3SBryan Drewery.Sy () .
12637bfb9b3SBryan DrewerySuch as
12737bfb9b3SBryan Drewery.Va ${VARIABLE} .
12837bfb9b3SBryan Drewery.It
129ef91670aSDavid E. O'BrienDo not use
130ef91670aSDavid E. O'Brien.Ic +=
13191c8d237SDavid E. O'Briento set variables that are only set once
13291c8d237SDavid E. O'Brien(or to set variables for the first time).
13391c8d237SDavid E. O'Brien.It
134ef91670aSDavid E. O'BrienDo not use vertical whitespace in simple makefiles,
13591c8d237SDavid E. O'Brienbut do use it to group locally related things in more complex/longer ones.
13691c8d237SDavid E. O'Brien.It
13791c8d237SDavid E. O'Brien.Va WARNS
13891c8d237SDavid E. O'Briencomes before
13991c8d237SDavid E. O'Brien.Va CFLAGS ,
14091c8d237SDavid E. O'Brienas it is basically a
14191c8d237SDavid E. O'Brien.Va CFLAGS
14291c8d237SDavid E. O'Brienmodifier.
14391c8d237SDavid E. O'BrienIt comes before
14491c8d237SDavid E. O'Brien.Va CFLAGS
14591c8d237SDavid E. O'Brienrather than after
14691c8d237SDavid E. O'Brien.Va CFLAGS
14791c8d237SDavid E. O'Brienso it does not get lost in a sea of
14891c8d237SDavid E. O'Brien.Va CFLAGS
14991c8d237SDavid E. O'Brienstatements as
15091c8d237SDavid E. O'Brien.Va WARNS
15191c8d237SDavid E. O'Brienis an important thing.
152a250a461SDavid E. O'BrienThe usage of
153a250a461SDavid E. O'Brien.Va WARNS
154a250a461SDavid E. O'Brienis spelled
155e84d3134SRuslan Ermilov.Dq Li "WARNS?= " ,
1568979ef39SMike Pritchardso that it may be overridden on the command line or in
15708b91343SYaroslav Tykhiy.Xr make.conf 5 .
15891c8d237SDavid E. O'Brien.It
159ef91670aSDavid E. O'Brien.Dq Li "NO_WERROR= yes"
160ef91670aSDavid E. O'Brienshould not be used,
161ef91670aSDavid E. O'Brienit defeats the purpose of
16291c8d237SDavid E. O'Brien.Va WARNS .
1637b5570bfSDavid E. O'BrienIt should only be used on the command line and in special circumstances.
16491c8d237SDavid E. O'Brien.It
16591c8d237SDavid E. O'Brien.Va CFLAGS
16691c8d237SDavid E. O'Brienis spelled
167ef91670aSDavid E. O'Brien.Dq Li "CFLAGS+= " .
16891c8d237SDavid E. O'Brien.It
169ef91670aSDavid E. O'BrienListing
170ef91670aSDavid E. O'Brien.Fl D Ns 's
171ef91670aSDavid E. O'Brienbefore
172ef91670aSDavid E. O'Brien.Fl I Ns 's
173ef91670aSDavid E. O'Brienin
17491c8d237SDavid E. O'Brien.Va CFLAGS
175ef91670aSDavid E. O'Brienis preferred for alphabetical ordering and to make
176ef91670aSDavid E. O'Brien.Fl D Ns 's
177ef91670aSDavid E. O'Brieneasier to see.
178ef91670aSDavid E. O'BrienThe
179ef91670aSDavid E. O'Brien.Fl D Ns 's
180ef91670aSDavid E. O'Brienoften affect conditional compilation,
181ef91670aSDavid E. O'Brienand
182ef91670aSDavid E. O'Brien.Fl I Ns 's
183ef91670aSDavid E. O'Brientend to be quite long.
184a250a461SDavid E. O'BrienSplit long
185a250a461SDavid E. O'Brien.Va CFLAGS
186a250a461SDavid E. O'Briensettings between the
187a250a461SDavid E. O'Brien.Fl D Ns 's
188a250a461SDavid E. O'Brienand
189a250a461SDavid E. O'Brien.Fl I Ns 's.
19091c8d237SDavid E. O'Brien.It
191ef91670aSDavid E. O'BrienDo not use GCCisms (such as
192ef91670aSDavid E. O'Brien.Fl g
193ef91670aSDavid E. O'Brienand
194ef91670aSDavid E. O'Brien.Fl Wall )
195ef91670aSDavid E. O'Brienin
19691c8d237SDavid E. O'Brien.Va CFLAGS .
19791c8d237SDavid E. O'Brien.It
198ef91670aSDavid E. O'BrienTypically, there is one
199ef91670aSDavid E. O'Brien.Tn ASCII
200ef91670aSDavid E. O'Brientab between
201ef91670aSDavid E. O'Brien.Va VAR Ns Ic =
20291c8d237SDavid E. O'Brienand the value in order to start the value in column 9.
203ef91670aSDavid E. O'BrienAn
204ef91670aSDavid E. O'Brien.Tn ASCII
205ef91670aSDavid E. O'Brienspace is allowed for variable names that extend beyond column 9.
206ef91670aSDavid E. O'BrienA lack of whitespace is also allowed for very long variable names.
20791c8d237SDavid E. O'Brien.It
208fe08efe6SRuslan Ermilov.Ic .include In bsd.*.mk
20991c8d237SDavid E. O'Briengoes last.
210a250a461SDavid E. O'Brien.It
211a250a461SDavid E. O'BrienDo not use anachronisms like
212a250a461SDavid E. O'Brien.Va $<
213a250a461SDavid E. O'Brienand
214a250a461SDavid E. O'Brien.Va $@ .
215a250a461SDavid E. O'BrienInstead use
2167b5570bfSDavid E. O'Brien.Va ${.IMPSRC}
217a250a461SDavid E. O'Brienor
2187b5570bfSDavid E. O'Brien.Va ${.ALLSRC}
219a250a461SDavid E. O'Brienand
2207b5570bfSDavid E. O'Brien.Va ${.TARGET} .
2219146ea4eSDavid E. O'Brien.It
2229146ea4eSDavid E. O'BrienTo not build the
223db9eea4dSDavid E. O'Brien.Dq foo
2249146ea4eSDavid E. O'Brienpart of the base system,
2259146ea4eSDavid E. O'Brienuse
2269146ea4eSDavid E. O'Brien.Va NO_FOO ,
2279146ea4eSDavid E. O'Briennot
2289146ea4eSDavid E. O'Brien.Va NOFOO .
2299146ea4eSDavid E. O'Brien.It
2309146ea4eSDavid E. O'BrienTo optionally build something in the base system,
2319146ea4eSDavid E. O'Brienspell the knob
2329146ea4eSDavid E. O'Brien.Va WITH_FOO
2339146ea4eSDavid E. O'Briennot
23440f3723dSDavid E. O'Brien.Va WANT_FOO
2359146ea4eSDavid E. O'Brienor
2369146ea4eSDavid E. O'Brien.Va USE_FOO .
237db9eea4dSDavid E. O'BrienThe latter are reserved for the
238db9eea4dSDavid E. O'Brien.Fx
239db9eea4dSDavid E. O'BrienPorts Collection.
2409146ea4eSDavid E. O'Brien.It
2419146ea4eSDavid E. O'BrienFor variables that are only checked with
242db9eea4dSDavid E. O'Brien.Fn defined ,
243db9eea4dSDavid E. O'Briendo not provide any fake value.
24491c8d237SDavid E. O'Brien.El
24591c8d237SDavid E. O'Brien.Pp
24691c8d237SDavid E. O'BrienThe desire to express a logical grouping often means not obeying some of the
24791c8d237SDavid E. O'Brienabove.
248b3eaeb0bSRuslan Ermilov.Sh EXAMPLES
249ef91670aSDavid E. O'BrienThe simplest program
250ef91670aSDavid E. O'Brien.Pa Makefile
251ef91670aSDavid E. O'Brienis:
252ef91670aSDavid E. O'Brien.Bd -literal -offset indent
253ef91670aSDavid E. O'Brien# $FreeBSD\&$
25491c8d237SDavid E. O'Brien
25591c8d237SDavid E. O'BrienPROG=	foo
25691c8d237SDavid E. O'Brien
25791c8d237SDavid E. O'Brien\&.include <bsd.prog.mk>
258ef91670aSDavid E. O'Brien.Ed
25991c8d237SDavid E. O'Brien.Pp
260ef91670aSDavid E. O'BrienThe simplest library
261ef91670aSDavid E. O'Brien.Pa Makefile
262ef91670aSDavid E. O'Brienis:
263ef91670aSDavid E. O'Brien.Bd -literal -offset indent
264ef91670aSDavid E. O'Brien# $FreeBSD\&$
26591c8d237SDavid E. O'Brien
26691c8d237SDavid E. O'BrienLIB=	foo
26791c8d237SDavid E. O'BrienSHLIB_MAJOR= 1
26891c8d237SDavid E. O'BrienMAN=	libfoo.3
26991c8d237SDavid E. O'BrienSRCS=	foo.c
27091c8d237SDavid E. O'Brien
27191c8d237SDavid E. O'Brien\&.include <bsd.lib.mk>
272ef91670aSDavid E. O'Brien.Ed
27391c8d237SDavid E. O'Brien.Sh SEE ALSO
274ef91670aSDavid E. O'Brien.Xr make 1 ,
27508b91343SYaroslav Tykhiy.Xr make.conf 5 ,
27691c8d237SDavid E. O'Brien.Xr style 9
27791c8d237SDavid E. O'Brien.Sh HISTORY
278ef91670aSDavid E. O'BrienThis manual page is inspired from the same source as
27991c8d237SDavid E. O'Brien.Xr style 9
280ef91670aSDavid E. O'Brienmanual page in
28191c8d237SDavid E. O'Brien.Fx .
28291c8d237SDavid E. O'Brien.Sh BUGS
28391c8d237SDavid E. O'BrienThere are few hard and fast style rules here.
284ef91670aSDavid E. O'BrienThe style of many things is too dependent on the context of the whole makefile,
28591c8d237SDavid E. O'Brienor the lines surrounding it.
286