|GNU Make Manual||www.imodulo.com · 2003-04-05|
|[ Software | Documentation | Contact ]|
Another way to set the value of a variable is to use the
define directive. This directive has an unusual syntax which allows newline characters to be included in the value, which is convenient for defining both canned sequences of commands (Defining Canned Command Sequences), and also sections of makefile syntax to use with
eval (Eval Function).
define directive is followed on the same line by the name of the variable and nothing more. The value to give the variable appears on the following lines. The end of the value is marked by a line containing just the word
endef. Aside from this difference in syntax,
define works just like
=: it creates a recursively-expanded variable (The Two Flavors of Variables). The variable name may contain function and variable references, which are expanded when the directive is read to find the actual variable name to use.
You may nest
make will keep track of nested directives and report an error if they are not all properly closed with
endef. Note that lines beginning with tab characters are considered part of a command script, so any
endef strings appearing on such a line will not be considered
define two-lines echo foo echo $(bar) endef
The value in an ordinary assignment cannot contain a newline; but the newlines that separate the lines of the value in a
define become part of the variable's value (except for the final newline which precedes the
endef and is not considered part of the value).
When used in a command script, the previous example is functionally equivalent to this:
two-lines = echo foo; echo $(bar)
since two commands separated by semicolon behave much like two separate shell commands. However, note that using two separate lines means
make will invoke the shell twice, running an independent subshell for each line. Command Execution.
If you want variable definitions made with
define to take precedence over command-line variable definitions, you can use the
override directive together with
override define two-lines foo $(bar) endef
|© Free Software Foundation, Inc.|