FreeBSD Manual Pages
STYLE.MAKEFILE(5) File Formats Manual STYLE.MAKEFILE(5) NAME style.Makefile -- FreeBSD Makefile style guide DESCRIPTION This file specifies the preferred style for makefiles in the FreeBSD source tree. * .PATH: comes first if needed, and is spelled ".PATH: ", with a single ASCII space after a colon. Do not use the VPATH variable. * 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 SRCS when using <bsd.prog.mk> and there is a single source file named the same as the PROG. * Omit MAN when using <bsd.prog.mk> and the manual page is named the same as the PROG, 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 possi- ble. * Variables are expanded with {}, not (). Such as ${VARIABLE}. * Do not use += to set variables that are only set once (or to set vari- ables for the first time). * Do not use vertical whitespace in simple makefiles, but do use it to group locally related things in more complex/longer ones. * WARNS comes before CFLAGS, as it is basically a CFLAGS modifier. It comes before CFLAGS rather than after CFLAGS so it does not get lost in a sea of CFLAGS statements as WARNS is an important thing. The usage of WARNS is spelled "WARNS?= ", so that it may be overridden on the command line or in make.conf(5). * "MK_WERROR=no" should not be used, it defeats the purpose of WARNS. It should only be used on the command line and in special circumstances. * CFLAGS is spelled "CFLAGS+= ". * Listing -D's before -I's in CFLAGS is preferred for alphabetical order- ing and to make -D's easier to see. The -D's often affect conditional compilation, and -I's tend to be quite long. Split long CFLAGS set- tings between the -D's and -I's. * Do not use GCCisms (such as -g and -Wall) in CFLAGS. * 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 al- lowed 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 "foo" part of the base system, use NO_FOO, not NOFOO. * To optionally build something in the base system, spell the knob WITH_FOO not WANT_FOO or USE_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. 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 make(1), make.conf(5), style(9) HISTORY This manual page is inspired from the style(9) manual page and first ap- peared in FreeBSD 5.1. 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 surround- ing it. FreeBSD ports 15.quarterly July 17, 2023 STYLE.MAKEFILE(5)
NAME | DESCRIPTION | EXAMPLES | SEE ALSO | HISTORY | AUTHORS | BUGS
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=style.Makefile&sektion=5&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>
