Make file echo displaying "$PATH" string

MakefileGnu Make

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBaruchLiView Question on Stackoverflow
Solution 1 - Makefilegsingh2011View Answer on Stackoverflow
Solution 2 - MakefileDummy00001View Answer on Stackoverflow