使文件回显显示"$ PATH"字符串

Bar*_*hLi 45 makefile

我试图强制make文件显示下一个字符串:

"Please execute next commands:
setenv PATH /usr/local/greenhills/mips5/linux86:$PATH"
Run Code Online (Sandbox Code Playgroud)

问题在于"$PATH".命令

@echo "setenv PATH /usr/local/greenhills/mips5/linux86:$PATH"
Run Code Online (Sandbox Code Playgroud)

导致结果

"setenv PATH /usr/local/greenhills/mips5/linux86:ATH"
Run Code Online (Sandbox Code Playgroud)

转义字符,引号的任何组合都"$(shell echo "没有得到所需的结果......

有什么建议?

gsi*_*011 50

GNU make手册中,他们在描述value函数时讨论了这个特定的例子:

值函数为您提供了一种使用变量值而无需展开的方法.请注意,这并不会撤消已经发生的扩展; 例如,如果您创建一个简单的扩展变量,则在定义期间会扩展其值; 在这种情况下,value函数将返回与直接使用变量相同的结果.

value函数的语法是:

 $(value variable)
Run Code Online (Sandbox Code Playgroud)

请注意,变量是变量的名称; 不是对该变量的引用.因此,在编写时通常不会使用'$'或括号.(但是,如果您希望名称不是常量,则可以在名称中使用变量引用.)

此函数的结果是包含变量值的字符串,不会发生任何扩展.例如,在这个makefile中:

 FOO = $PATH

 all:
         @echo $(FOO)
         @echo $(value FOO)
Run Code Online (Sandbox Code Playgroud)

第一个输出行是ATH,因为"$ P"将扩展为make变量,而第二个输出行将是$ PATH环境变量的当前值,因为值函数避免了扩展.


Dum*_*001 21

make使用$它自己的变量扩展.例如单个字符变量$A或具有长名称的变量 - ${VAR}$(VAR).

要将$命令放入命令,请使用$$,例如:

all:
  @echo "Please execute next commands:"
  @echo 'setenv PATH /usr/local/greenhills/mips5/linux86:$$PATH'
Run Code Online (Sandbox Code Playgroud)

还要注意make""''(双人和单引号)不发挥任何作用,他们被逐字传递到外壳.(删除@符号以查看make发送到shell的内容.)为防止shell扩展$PATH,第二行使用''.