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.
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.