manpagez: man pages & more
info make
Home | html | info | man

File: make.info,  Node: Rule Syntax,  Next: Prerequisite Types,  Prev: Rule Example,  Up: Rules

4.2 Rule Syntax
===============

In general, a rule looks like this:

     TARGETS : PREREQUISITES
             RECIPE
             ...

or like this:

     TARGETS : PREREQUISITES ; RECIPE
             RECIPE
             ...

   The TARGETS are file names, separated by spaces.  Wildcard characters
may be used (*note Using Wildcard Characters in File Names: Wildcards.)
and a name of the form 'A(M)' represents member M in archive file A
(*note Archive Members as Targets: Archive Members.).  Usually there is
only one target per rule, but occasionally there is a reason to have
more (*note Multiple Targets in a Rule: Multiple Targets.).

   The RECIPE lines start with a tab character (or the first character
in the value of the '.RECIPEPREFIX' variable; *note Special
Variables::).  The first recipe line may appear on the line after the
prerequisites, with a tab character, or may appear on the same line,
with a semicolon.  Either way, the effect is the same.  There are other
differences in the syntax of recipes.  *Note Writing Recipes in Rules:
Recipes.

   Because dollar signs are used to start 'make' variable references, if
you really want a dollar sign in a target or prerequisite you must write
two of them, '$$' (*note How to Use Variables: Using Variables.).  If
you have enabled secondary expansion (*note Secondary Expansion::) and
you want a literal dollar sign in the prerequisites list, you must
actually write _four_ dollar signs ('$$$$').

   You may split a long line by inserting a backslash followed by a
newline, but this is not required, as 'make' places no limit on the
length of a line in a makefile.

   A rule tells 'make' two things: when the targets are out of date, and
how to update them when necessary.

   The criterion for being out of date is specified in terms of the
PREREQUISITES, which consist of file names separated by spaces.
(Wildcards and archive members (*note Archives::) are allowed here too.)
A target is out of date if it does not exist or if it is older than any
of the prerequisites (by comparison of last-modification times).  The
idea is that the contents of the target file are computed based on
information in the prerequisites, so if any of the prerequisites
changes, the contents of the existing target file are no longer
necessarily valid.

   How to update is specified by a RECIPE.  This is one or more lines to
be executed by the shell (normally 'sh'), but with some extra features
(*note Writing Recipes in Rules: Recipes.).

© manpagez.com 2000-2025
Individual documents may contain additional copyright information.