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