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.\" 30ef91670aSDavid E. O'Brien.Dd February 28, 2003 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. 6791c8d237SDavid E. O'BrienThe general order is: 68ef91670aSDavid E. O'Brien.Va PROG Ns / Ns Va LIB Ns / Ns Va SCRIPT 6991c8d237SDavid E. O'Brien.Va FILES 7091c8d237SDavid E. O'Brien.Va LINKS 71ef91670aSDavid E. O'Brien.Oo Va NO Oc Ns Va MAN 72ef91670aSDavid E. O'Brien.Va MLINKS 7391c8d237SDavid E. O'Brien.Va INCS 74ef91670aSDavid E. O'Brien.Va SRCS 7591c8d237SDavid E. O'Brien.Va WARNS 7691c8d237SDavid E. O'Brien.Va CFLAGS 7791c8d237SDavid E. O'Brien.Va DPADD 78ef91670aSDavid E. O'Brien.Va LDADD . 7991c8d237SDavid E. O'Brien.It 8091c8d237SDavid E. O'BrienOmit 81ef91670aSDavid E. O'Brien.Va SRCS 8291c8d237SDavid E. O'Brienwhen using 83ef91670aSDavid E. O'Brien.Aq Pa bsd.prog.mk 8491c8d237SDavid E. O'Brienand there is a single source file named the same as the 8591c8d237SDavid E. O'Brien.Va PROG . 8691c8d237SDavid E. O'Brien.It 8791c8d237SDavid E. O'BrienOmit 8891c8d237SDavid E. O'Brien.Va MAN 8991c8d237SDavid E. O'Brienwhen using 90ef91670aSDavid E. O'Brien.Aq Pa bsd.prog.mk 91ef91670aSDavid E. O'Brienand the manual page is named the same as the 92ef91670aSDavid E. O'Brien.Va PROG , 9391c8d237SDavid E. O'Brienand is in section 1. 9491c8d237SDavid E. O'Brien.It 95ef91670aSDavid E. O'BrienAll variable assignments are spelled 96ef91670aSDavid E. O'Brien.Dq Va VAR Ns Ic = , 97ef91670aSDavid E. O'Brieni.e., no space between the variable name and the 98ef91670aSDavid E. O'Brien.Ic = . 9991c8d237SDavid E. O'BrienKeep values sorted alphabetically, if possible. 10091c8d237SDavid E. O'Brien.It 101ef91670aSDavid E. O'BrienDo not use 102ef91670aSDavid E. O'Brien.Ic += 10391c8d237SDavid E. O'Briento set variables that are only set once 10491c8d237SDavid E. O'Brien(or to set variables for the first time). 10591c8d237SDavid E. O'Brien.It 106ef91670aSDavid E. O'BrienDo not use vertical whitespace in simple makefiles, 10791c8d237SDavid E. O'Brienbut do use it to group locally related things in more complex/longer ones. 10891c8d237SDavid E. O'Brien.It 10991c8d237SDavid E. O'Brien.Va WARNS 11091c8d237SDavid E. O'Briencomes before 11191c8d237SDavid E. O'Brien.Va CFLAGS , 11291c8d237SDavid E. O'Brienas it is basically a 11391c8d237SDavid E. O'Brien.Va CFLAGS 11491c8d237SDavid E. O'Brienmodifier. 11591c8d237SDavid E. O'BrienIt comes before 11691c8d237SDavid E. O'Brien.Va CFLAGS 11791c8d237SDavid E. O'Brienrather than after 11891c8d237SDavid E. O'Brien.Va CFLAGS 11991c8d237SDavid E. O'Brienso it does not get lost in a sea of 12091c8d237SDavid E. O'Brien.Va CFLAGS 12191c8d237SDavid E. O'Brienstatements as 12291c8d237SDavid E. O'Brien.Va WARNS 12391c8d237SDavid E. O'Brienis an important thing. 124a250a461SDavid E. O'BrienThe usage of 125a250a461SDavid E. O'Brien.Va WARNS 126a250a461SDavid E. O'Brienis spelled 127a250a461SDavid E. O'Brien.Dq Li "WARNS?= " . 128a250a461SDavid E. O'Brienso that it may be overriden on the command-line or in 129a250a461SDavid E. O'Brien.Pa /etc/make.conf . 13091c8d237SDavid E. O'Brien.It 131ef91670aSDavid E. O'Brien.Dq Li "NO_WERROR= yes" 132ef91670aSDavid E. O'Brienshould not be used, 133ef91670aSDavid E. O'Brienit defeats the purpose of 13491c8d237SDavid E. O'Brien.Va WARNS . 135a250a461SDavid E. O'BrienIt should only be used on the command-line and in special circomstances. 13691c8d237SDavid E. O'Brien.It 13791c8d237SDavid E. O'Brien.Va CFLAGS 13891c8d237SDavid E. O'Brienis spelled 139ef91670aSDavid E. O'Brien.Dq Li "CFLAGS+= " . 14091c8d237SDavid E. O'Brien.It 141ef91670aSDavid E. O'BrienListing 142ef91670aSDavid E. O'Brien.Fl D Ns 's 143ef91670aSDavid E. O'Brienbefore 144ef91670aSDavid E. O'Brien.Fl I Ns 's 145ef91670aSDavid E. O'Brienin 14691c8d237SDavid E. O'Brien.Va CFLAGS 147ef91670aSDavid E. O'Brienis preferred for alphabetical ordering and to make 148ef91670aSDavid E. O'Brien.Fl D Ns 's 149ef91670aSDavid E. O'Brieneasier to see. 150ef91670aSDavid E. O'BrienThe 151ef91670aSDavid E. O'Brien.Fl D Ns 's 152ef91670aSDavid E. O'Brienoften affect conditional compilation, 153ef91670aSDavid E. O'Brienand 154ef91670aSDavid E. O'Brien.Fl I Ns 's 155ef91670aSDavid E. O'Brientend to be quite long. 156a250a461SDavid E. O'BrienSplit long 157a250a461SDavid E. O'Brien.Va CFLAGS 158a250a461SDavid E. O'Briensettings between the 159a250a461SDavid E. O'Brien.Fl D Ns 's 160a250a461SDavid E. O'Brienand 161a250a461SDavid E. O'Brien.Fl I Ns 's. 16291c8d237SDavid E. O'Brien.It 163ef91670aSDavid E. O'BrienDo not use GCCisms (such as 164ef91670aSDavid E. O'Brien.Fl g 165ef91670aSDavid E. O'Brienand 166ef91670aSDavid E. O'Brien.Fl Wall ) 167ef91670aSDavid E. O'Brienin 16891c8d237SDavid E. O'Brien.Va CFLAGS . 16991c8d237SDavid E. O'Brien.It 170ef91670aSDavid E. O'BrienTypically, there is one 171ef91670aSDavid E. O'Brien.Tn ASCII 172ef91670aSDavid E. O'Brientab between 173ef91670aSDavid E. O'Brien.Va VAR Ns Ic = 17491c8d237SDavid E. O'Brienand the value in order to start the value in column 9. 175ef91670aSDavid E. O'BrienAn 176ef91670aSDavid E. O'Brien.Tn ASCII 177ef91670aSDavid E. O'Brienspace is allowed for variable names that extend beyond column 9. 178ef91670aSDavid E. O'BrienA lack of whitespace is also allowed for very long variable names. 17991c8d237SDavid E. O'Brien.It 180ef91670aSDavid E. O'Brien.Ic .include Aq Pa bsd.*.mk 18191c8d237SDavid E. O'Briengoes last. 182a250a461SDavid E. O'Brien.It 183a250a461SDavid E. O'BrienDo not use anachronisms like 184a250a461SDavid E. O'Brien.Va $< 185a250a461SDavid E. O'Brienand 186a250a461SDavid E. O'Brien.Va $@ . 187a250a461SDavid E. O'BrienInstead use 188a250a461SDavid E. O'Brien.Cm ${.IMPSRC} 189a250a461SDavid E. O'Brienor 190a250a461SDavid E. O'Brien.Cm ${.ALLSRC} 191a250a461SDavid E. O'Brienand 192a250a461SDavid E. O'Brien.Cm ${.TARGET} 19391c8d237SDavid E. O'Brien.El 19491c8d237SDavid E. O'Brien.Pp 19591c8d237SDavid E. O'BrienThe desire to express a logical grouping often means not obeying some of the 19691c8d237SDavid E. O'Brienabove. 197ef91670aSDavid E. O'Brien.Sh EXAMPLE 198ef91670aSDavid E. O'BrienThe simplest program 199ef91670aSDavid E. O'Brien.Pa Makefile 200ef91670aSDavid E. O'Brienis: 201ef91670aSDavid E. O'Brien.Bd -literal -offset indent 202ef91670aSDavid E. O'Brien# $FreeBSD\&$ 20391c8d237SDavid E. O'Brien 20491c8d237SDavid E. O'BrienPROG= foo 20591c8d237SDavid E. O'Brien 20691c8d237SDavid E. O'Brien\&.include <bsd.prog.mk> 207ef91670aSDavid E. O'Brien.Ed 20891c8d237SDavid E. O'Brien.Pp 209ef91670aSDavid E. O'BrienThe simplest library 210ef91670aSDavid E. O'Brien.Pa Makefile 211ef91670aSDavid E. O'Brienis: 212ef91670aSDavid E. O'Brien.Bd -literal -offset indent 213ef91670aSDavid E. O'Brien# $FreeBSD\&$ 21491c8d237SDavid E. O'Brien 21591c8d237SDavid E. O'BrienLIB= foo 21691c8d237SDavid E. O'BrienSHLIB_MAJOR= 1 21791c8d237SDavid E. O'BrienMAN= libfoo.3 21891c8d237SDavid E. O'BrienSRCS= foo.c 21991c8d237SDavid E. O'Brien 22091c8d237SDavid E. O'Brien\&.include <bsd.lib.mk> 221ef91670aSDavid E. O'Brien.Ed 22291c8d237SDavid E. O'Brien.Sh SEE ALSO 223ef91670aSDavid E. O'Brien.Xr make 1 , 22491c8d237SDavid E. O'Brien.Xr style 9 22591c8d237SDavid E. O'Brien.Sh HISTORY 226ef91670aSDavid E. O'BrienThis manual page is inspired from the same source as 22791c8d237SDavid E. O'Brien.Xr style 9 228ef91670aSDavid E. O'Brienmanual page in 22991c8d237SDavid E. O'Brien.Fx . 23091c8d237SDavid E. O'Brien.Sh BUGS 23191c8d237SDavid E. O'BrienThere are few hard and fast style rules here. 232ef91670aSDavid E. O'BrienThe style of many things is too dependent on the context of the whole makefile, 23391c8d237SDavid E. O'Brienor the lines surrounding it. 234