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