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>.