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

File: make.info,  Node: Recipe Syntax,  Next: Echoing,  Prev: Recipes.php">Recipes,  Up: Recipes.php">Recipes

5.1 Recipe Syntax
=================

Makefiles have the unusual property that there are really two distinct
syntaxes in one file.  Most of the makefile uses 'make' syntax (*note
Writing Makefiles: Makefiles.).  However, recipes are meant to be
interpreted by the shell and so they are written using shell syntax.
The 'make' program does not try to understand shell syntax: it performs
only a very few specific translations on the content of the recipe
before handing it to the shell.

   Each line in the recipe must start with a tab (or the first character
in the value of the '.RECIPEPREFIX' variable; *note Special
Variables::), except that the first recipe line may be attached to the
target-and-prerequisites line with a semicolon in between.  _Any_ line
in the makefile that begins with a tab and appears in a "rule context"
(that is, after a rule has been started until another rule or variable
definition) will be considered part of a recipe for that rule.  Blank
lines and lines of just comments may appear among the recipe lines; they
are ignored.

   Some consequences of these rules include:

   * A blank line that begins with a tab is not blank: it's an empty
     recipe (*note Empty Recipes::).

   * A comment in a recipe is not a 'make' comment; it will be passed to
     the shell as-is.  Whether the shell treats it as a comment or not
     depends on your shell.

   * A variable definition in a "rule context" which is indented by a
     tab as the first character on the line, will be considered part of
     a recipe, not a 'make' variable definition, and passed to the
     shell.

   * A conditional expression ('ifdef', 'ifeq', etc.  *note Syntax of
     Conditionals: Conditional Syntax.) in a "rule context" which is
     indented by a tab as the first character on the line, will be
     considered part of a recipe and be passed to the shell.

* Menu:

* Splitting Recipe Lines::      Breaking long recipe lines for readability.
* Variables in Recipes::        Using 'make' variables in recipes.

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