GNU make
parses makefiles line-by-line. Parsing proceeds using the following steps:
make
Reads a Makefile). An important consequence of this is that a macro can expand to an entire rule, if it is one line long. This will work:
myrule = target : ; echo built $(myrule)
However, this will not work because make
does not re-split lines after it has expanded them:
define myrule target: echo built endef $(myrule)
The above makefile results in the definition of a target ‘target’ with prerequisites ‘echo’ and ‘built’, as if the makefile contained target: echo built
, rather than a rule with a recipe. Newlines still present in a line after expansion is complete are ignored as normal whitespace.
In order to properly expand a multi-line macro you must use the eval
function: this causes the make
parser to be run on the results of the expanded macro (see Eval Function).
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/Parsing-Makefiles.html