f78
Defining Variables Verbatim
Contents|Index|Previous|Next
Defining Variables Verbatim
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 canned
sequences of commands (see Defining Canned Command Sequences).
The
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 (see 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.
define two-lines
echo foo
echo $(bar)
endef
The value in an ordinary assignment cannot contain a newline; 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). The previous example is
functionally equivalent to two-lines = echo foo; echo $(bar) since two commands separated by semicolon behave much like two separate shell
commands.
However, using two separate lines means
make will invoke the shell twice, running an independent sub-shell for each line.
See 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 define as in the following example.
override define two-lines
foo
$(bar)
endef
See The override Directive.
0