In the manual for GNU make, they talk about this specific example when describing the value function:
The value function provides a way for you to use the value of a
variable without having it expanded. Please note that this does not
undo expansions which have already occurred; for example if you create
a simply expanded variable its value is expanded during the
definition; in that case the value function will return the same
result as using the variable directly.The syntax of the value function is:
$(value variable)Note that variable is the name of a variable; not a reference to that variable. Therefore you would not normally use
a ā$ā or parentheses when writing it. (You can, however, use a
variable reference in the name if you want the name not to be a
constant.)The result of this function is a string containing the value of
variable, without any expansion occurring. For example, in this
makefile:FOO = $PATH all: @echo $(FOO) @echo $(value FOO)The first output line would be ATH, since the ā$Pā would be expanded as a make variable, while the second
output line would be the current value of your $PATH environment
variable, since the value function avoided the expansion.