Makefiles have the unusual property that there are really two distinct syntaxes in one file. Most of the makefile uses make
syntax (see Writing 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; see 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:
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. make
variable definition, and passed to the shell. ifdef
, ifeq
, etc. see Syntax of Conditionals) 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. • Splitting Recipe Lines | Breaking long recipe lines for readability. | |
• Variables in Recipes | Using make variables in recipes. |
Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/make/manual/html_node/Recipe-Syntax.html