A makefile is made of four types of lines:
Dependency lines
Creation commands
Variable assignments
Comments, include statements and conditional directives
A dependency line is a list of one or more targets, an operator
(:
, ::
, or !
),
and a list of zero or more sources. Sources may contain wildcards and
certain local variables.
A creation command is a regular shell command preceded by a tab. In
addition, if the first two characters after the tab
(and other whitespace) are a combination of @
or
-
, PMake will cause the
command to not be printed (if the character is @
) or
errors from it to be ignored (if -
). A blank line,
dependency line or variable assignment terminates a creation script.
There may be only one creation script for each target with a
:
or !
operator.
Variables are places to store text. They may be unconditionally
assigned-to using the =
operator, appended-to using
the +=
operator, conditionally (if the variable is
undefined) assigned-to with the ?=
operator, and
assigned-to with variable expansion with the :=
operator. The output of a shell command may be assigned to a variable
using the !=
operator. Variables may be expanded
(their value inserted) by enclosing their name in parentheses or curly
braces, preceded by a dollar sign. A dollar sign may be escaped with
another dollar sign. Variables are not expanded if
PMake does not know about them.
There are seven local variables: .TARGET
,
.ALLSRC
, .OODATE
,
.PREFIX
, .IMPSRC
,
.ARCHIVE
, and .MEMBER
.
Four of them (.TARGET
, .PREFIX
,
.ARCHIVE
, and .MEMBER
) may be used
to specify “dynamic sources”. Variables are good. Know
them. Love them. Live them.
Debugging of makefiles is best accomplished using the
-n
, -d m
, and
-p 2
flags.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.