(make.info.gz) Defining
Info Catalog
(make.info.gz) Override Directive
(make.info.gz) Using Variables
(make.info.gz) Environment
6.8 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
both canned sequences of commands ( Defining Canned Command
Sequences Sequences.), and also sections of makefile syntax to use
with `eval' ( Eval Function).
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 ( The Two Flavors of Variables Flavors.). 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 `define' directives: `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 `define' or `endef' strings appearing
on such a line will not be considered `make' operators.
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 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':
override define two-lines
foo
$(bar)
endef
The `override' Directive Override Directive.
Info Catalog
(make.info.gz) Override Directive
(make.info.gz) Using Variables
(make.info.gz) Environment
automatically generated byinfo2html