Make file echo displaying "$PATH" string
MakefileGnu MakeMakefile Problem Overview
I am trying to force make file to display next string:
"Please execute next commands:
setenv PATH /usr/local/greenhills/mips5/linux86:$PATH"
The problem is with "$PATH"
. Command
@echo "setenv PATH /usr/local/greenhills/mips5/linux86:$PATH"
cause a result
"setenv PATH /usr/local/greenhills/mips5/linux86:ATH"
any combinations of escape characters, quotes, "$(shell echo "
didn't get required results...
Any suggestions?
Makefile Solutions
Solution 1 - Makefile
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.
Solution 2 - Makefile
The make
uses the $
for its own variable expansions. E.g. single character variable $A
or variable with a long name - ${VAR}
and $(VAR)
.
To put the $
into a command, use the $$
, for example:
all:
@echo "Please execute next commands:"
@echo 'setenv PATH /usr/local/greenhills/mips5/linux86:$$PATH'
Also note that to make
the ""
and ''
(double and single quoting) do not play any role and they are passed verbatim to the shell. (Remove the @
sign to see what make
sends to shell.) To prevent the shell from expanding $PATH
, second line uses the ''
.