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.\" 3091c8d237SDavid E. O'Brien.Dd November 27, 2002 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 3591c8d237SDavid E. O'Brien.Nd "FreeBSD Makefile file style guide" 3691c8d237SDavid E. O'Brien.Sh DESCRIPTION 3791c8d237SDavid E. O'BrienThis file specifies the preferred style for Makefiles in the 3891c8d237SDavid E. O'Brien.Fx 3991c8d237SDavid E. O'Briensource tree. 4091c8d237SDavid E. O'Brien.Pp 4191c8d237SDavid E. O'Brien.Bl -bullet -compact 4291c8d237SDavid E. O'Brien.It 4391c8d237SDavid E. O'BrienAll Makefiles should have an SCM ID at the start of the file, 4491c8d237SDavid E. O'Brienfollowed by a blank line. 4591c8d237SDavid E. O'Brien.Bd -literal 4691c8d237SDavid E. O'Brien# $FreeBSD$ 4791c8d237SDavid E. O'Brien 4891c8d237SDavid E. O'Brien.Ed 4991c8d237SDavid E. O'Brien.It 5091c8d237SDavid E. O'Brien\&.PATH: comes next if needed, and is spelled 5191c8d237SDavid E. O'Brien.Pa ".PATH: <ascii space>" 5291c8d237SDavid E. O'Brien.It 5391c8d237SDavid E. O'BrienSpecial variables (i.e., LIB, SRCS, MLINKS, etc..) are listed in order 5491c8d237SDavid E. O'Brienof 'product', 5591c8d237SDavid E. O'Brienthen building and installing a binary. 5691c8d237SDavid E. O'BrienThe general order is: 5791c8d237SDavid E. O'Brien.Va PROG/LIB/SCRIPT 5891c8d237SDavid E. O'Brien.Va FILES 5991c8d237SDavid E. O'Brien.Va LINKS 6091c8d237SDavid E. O'Brien.Va [NO]MAN 6191c8d237SDavid E. O'Brien.Va MLINK 6291c8d237SDavid E. O'Brien.Va INCS 6391c8d237SDavid E. O'Brien.Va SRC 6491c8d237SDavid E. O'Brien.Va WARNS 6591c8d237SDavid E. O'Brien.Va CFLAGS 6691c8d237SDavid E. O'Brien.Va DPADD 6791c8d237SDavid E. O'Brien.Va LDADD 6891c8d237SDavid E. O'Brien.It 6991c8d237SDavid E. O'BrienOmit 7091c8d237SDavid E. O'Brien.Va SRC 7191c8d237SDavid E. O'Brienwhen using 7291c8d237SDavid E. O'Brien.Pa bsd.prog.mk 7391c8d237SDavid E. O'Brienand there is a single source file named the same as the 7491c8d237SDavid E. O'Brien.Va PROG . 7591c8d237SDavid E. O'Brien.It 7691c8d237SDavid E. O'BrienOmit 7791c8d237SDavid E. O'Brien.Va MAN 7891c8d237SDavid E. O'Brienwhen using 7991c8d237SDavid E. O'Brien.Pa bsd.prog.mk 8091c8d237SDavid E. O'Brienand the man page is named the same as the 8191c8d237SDavid E. O'Brien.Va PROG 8291c8d237SDavid E. O'Brienand is in section 1. 8391c8d237SDavid E. O'Brien.It 8491c8d237SDavid E. O'BrienAll variable assignment is spelled 8591c8d237SDavid E. O'Brien.Pa "VAR=" , 8691c8d237SDavid E. O'Brieni.e. no space between the variable name and the 8791c8d237SDavid E. O'Brien.Pa "=" . 8891c8d237SDavid E. O'BrienKeep values sorted alphabetically, if possible. 8991c8d237SDavid E. O'Brien.It 9091c8d237SDavid E. O'BrienDon't use 9191c8d237SDavid E. O'Brien.Pa "+=" 9291c8d237SDavid E. O'Briento set variables that are only set once 9391c8d237SDavid E. O'Brien(or to set variables for the first time). 9491c8d237SDavid E. O'Brien.It 9591c8d237SDavid E. O'BrienDon't use vertical whitespace in simple Makefiles, 9691c8d237SDavid E. O'Brienbut do use it to group locally related things in more complex/longer ones. 9791c8d237SDavid E. O'Brien.It 9891c8d237SDavid E. O'Brien.Va WARNS 9991c8d237SDavid E. O'Briencomes before 10091c8d237SDavid E. O'Brien.Va CFLAGS , 10191c8d237SDavid E. O'Brienas it is basically a 10291c8d237SDavid E. O'Brien.Va CFLAGS 10391c8d237SDavid E. O'Brienmodifier. 10491c8d237SDavid E. O'BrienIt comes before 10591c8d237SDavid E. O'Brien.Va CFLAGS 10691c8d237SDavid E. O'Brienrather than after 10791c8d237SDavid E. O'Brien.Va CFLAGS 10891c8d237SDavid E. O'Brienso it does not get lost in a sea of 10991c8d237SDavid E. O'Brien.Va CFLAGS 11091c8d237SDavid E. O'Brienstatements as 11191c8d237SDavid E. O'Brien.Va WARNS 11291c8d237SDavid E. O'Brienis an important thing. 11391c8d237SDavid E. O'Brien.It 11491c8d237SDavid E. O'BrienUnconditional 11591c8d237SDavid E. O'Brien.Pa "NO_WERROR=yes" 11691c8d237SDavid E. O'Brienshould not be used. 11791c8d237SDavid E. O'BrienIt defeats the purpose of 11891c8d237SDavid E. O'Brien.Va WARNS . 11991c8d237SDavid E. O'Brien.It 12091c8d237SDavid E. O'Brien.Va CFLAGS 12191c8d237SDavid E. O'Brienis spelled 12291c8d237SDavid E. O'Brien.Pa "CFLAGS+=<ascii space>" . 12391c8d237SDavid E. O'Brien.It 12491c8d237SDavid E. O'BrienListing -D's before -I's in 12591c8d237SDavid E. O'Brien.Va CFLAGS 12691c8d237SDavid E. O'Brienis preferred for alphabetical ordering and to make -D's easier to see. 12791c8d237SDavid E. O'BrienThe -D's often affect conditional compilation, 12891c8d237SDavid E. O'Brienand -I's tend to be quite long. 12991c8d237SDavid E. O'Brien.It 13091c8d237SDavid E. O'BrienDon't use GCC'isms (such as -g and -Wall) in 13191c8d237SDavid E. O'Brien.Va CFLAGS . 13291c8d237SDavid E. O'Brien.It 13391c8d237SDavid E. O'BrienTypically there is one <ascii tab> between 13491c8d237SDavid E. O'Brien.Pa "VAR=" 13591c8d237SDavid E. O'Brienand the value in order to start the value in column 9. 13691c8d237SDavid E. O'BrienAn <ascii space> is allowed for VAR names that extend beyond column 9. 13791c8d237SDavid E. O'BrienA lack of whitespace also is allowed for very long VAR names. 13891c8d237SDavid E. O'Brien.Bd -literal 13991c8d237SDavid E. O'Brien.It 14091c8d237SDavid E. O'Brien".include <bsd.*.mk>" 14191c8d237SDavid E. O'Briengoes last. 14291c8d237SDavid E. O'Brien.El 14391c8d237SDavid E. O'Brien.Ed 14491c8d237SDavid E. O'Brien.Pp 14591c8d237SDavid E. O'BrienThe desire to express a logical grouping often means not obeying some of the 14691c8d237SDavid E. O'Brienabove. 14791c8d237SDavid E. O'Brien.Pp 14891c8d237SDavid E. O'BrienThe simplist program Makefile is: 14991c8d237SDavid E. O'Brien.Bd -literal 15091c8d237SDavid E. O'Brien# $FreeBSD$ 15191c8d237SDavid E. O'Brien 15291c8d237SDavid E. O'BrienPROG= foo 15391c8d237SDavid E. O'Brien 15491c8d237SDavid E. O'Brien\&.include <bsd.prog.mk> 15591c8d237SDavid E. O'Brien.Pp 15691c8d237SDavid E. O'BrienThe simplist library Makefile is: 15791c8d237SDavid E. O'Brien.Bd -literal 15891c8d237SDavid E. O'Brien# $FreeBSD$ 15991c8d237SDavid E. O'Brien 16091c8d237SDavid E. O'BrienLIB= foo 16191c8d237SDavid E. O'BrienSHLIB_MAJOR= 1 16291c8d237SDavid E. O'BrienMAN= libfoo.3 16391c8d237SDavid E. O'BrienSRCS= foo.c 16491c8d237SDavid E. O'Brien 16591c8d237SDavid E. O'Brien\&.include <bsd.lib.mk> 16691c8d237SDavid E. O'Brien.Pp 16791c8d237SDavid E. O'Brien.Sh SEE ALSO 16891c8d237SDavid E. O'Brien.Xr make 1 16991c8d237SDavid E. O'Brien.Xr style 9 17091c8d237SDavid E. O'Brien.Sh HISTORY 17191c8d237SDavid E. O'BrienThis man page is inspired from the same source as 17291c8d237SDavid E. O'Brien.Xr style 9 17391c8d237SDavid E. O'Brienman page in 17491c8d237SDavid E. O'Brien.Fx . 17591c8d237SDavid E. O'Brien.Sh BUGS 17691c8d237SDavid E. O'BrienThere are few hard and fast style rules here. 17791c8d237SDavid E. O'BrienThe style of many things are too dependent on the context of the whole Makefile, 17891c8d237SDavid E. O'Brienor the lines surrounding it. 179