STYLE.MAKEFILE(5)
π NAME π
<style.Makefile> is the FreeBSD Makefile style guide β a File Formats Manual page, section 5, and yes bestie, we're making it cute. It's the preferred style for makefiles in the FreeBSD source tree, and every rule is still here. Periodt. π
β¨ DESCRIPTION β¨
This file specifies the preferred style for makefiles in the FreeBSD source tree. Slay. Here's the full checklist, no skips, no cap:
.PATH:β comes first if needed, and is spelled.PATH:with a single ASCII space after a colon. Do not use theVPATHvariable.- Special variables (i.e.,
LIB,SRCS,MLINKS, etc.) are listed in order of βproductβ, then building and installing a binary. Special variables may also be listed in βbuildβ order: i.e., ones for the primary program (or library) first.
The general βproductβ order is: PROG/[SH]LIB/SCRIPTS FILES LINKS MAN MLINKS INCS SRCS WARNS CSTD CFLAGS DPADD LDADD.
The general βbuildβ order is: PROG/[SH]LIB/SCRIPTS SRCS WARNS CSTD CFLAGS DPADD LDADD INCS FILES LINKS MAN MLINKS.
- Omit
SRCSwhen using<bsd.prog.mk>and there is a single source file named the same as thePROG. - Omit
MANwhen using<bsd.prog.mk>and the manual page is named the same as thePROG, and is in section 1. - All variable assignments are spelled
VAR=, i.e., no space between the variable name and the=. Keep values sorted alphabetically, if possible. - Variables are expanded with
{}, not(). Such as${VARIABLE}. - Do not use
+=to set variables that are only set once (or to set variables for the first time). - Vertical whitespace β do not use it in simple makefiles, but do use it to group locally related things in more complex/longer ones.
WARNScomes beforeCFLAGS, as it is basically aCFLAGSmodifier. It comes beforeCFLAGSrather than afterCFLAGSso it does not get lost in a sea ofCFLAGSstatements βWARNSis an important thing. The usage ofWARNSis spelledWARNS?=, so that it may be overridden on the command line or inmake.conf(5).MK_WERROR=noshould not be used β it defeats the purpose ofWARNS. It should only be used on the command line and in special circumstances.CFLAGSis spelledCFLAGS+=.- Listing
-D's before-I's inCFLAGSis preferred for alphabetical ordering and to make-D's easier to see. The-D's often affect conditional compilation, and-I's tend to be quite long. Split longCFLAGSsettings between the-D's and-I's. - Do not use GCCisms (such as
-gand-Wall) inCFLAGS. - Whitespace vibes β typically, there is one ASCII tab between
VAR=and the value in order to start the value in column 9. An ASCII space is allowed for variable names that extend beyond column 9. A lack of whitespace is also allowed for very long variable names. .include <bsd.*.mk>goes last.- Do not use anachronisms like
$<and$@. Instead use${.IMPSRC}or${.ALLSRC}and${.TARGET}. - To not build the
foopart of the base system, useNO_FOO, notNOFOO. - To optionally build something in the base system, spell the knob
WITH_FOO, notWANT_FOOorUSE_FOO. The latter are reserved for the FreeBSD Ports Collection. - For variables that are only checked with
defined(), do not provide any fake value.
The desire to express a logical grouping often means not obeying some of the above. It's giving βrules are cute but context is main character energy.β π
π§ͺ EXAMPLES π§ͺ
The simplest program Makefile is:
PROG= foo
.include <bsd.prog.mk>
The simplest library Makefile is:
LIB= foo
SHLIB_MAJOR= 1
MAN= libfoo.3
SRCS= foo.c
.include <bsd.lib.mk>
π SEE ALSO π
π°οΈ HISTORY π°οΈ
This manual page is inspired from the style(9) manual page and first appeared in FreeBSD 5.1. A little icon behavior, honestly. π
π AUTHORS π
David O'Brien <deo@NUXI.org>
π BUGS π
There are few hard and fast style rules here. The style of many things is too dependent on the context of the whole makefile, or the lines surrounding it. So yeah β the vibe check is contextual, bestie. π
okay that's the whole glow-up π this lil' page is signed off by Debian, dated July 17, 2023, and it's all for STYLE.MAKEFILE(5). now go make those makefiles iconic β¨
π¦ where this page comes from
- freebsd 15.1: base 15.1
- nixpkgs unstable: source
- π the page's license: BSD-3-Clause
- Copyright (c) 2002-2003, 2023 David O'Brien <obrien@FreeBSD.org>
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms