使文件回显显示“$ PATH”字符串

时间:2010-09-14 09:15:59

标签: makefile

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

"Please execute next commands:
setenv PATH /usr/local/greenhills/mips5/linux86:$PATH"

问题在于"$PATH"。命令

@echo "setenv PATH /usr/local/greenhills/mips5/linux86:$PATH"

导致结果

"setenv PATH /usr/local/greenhills/mips5/linux86:ATH"

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

有什么建议吗?

2 个答案:

答案 0 :(得分:49)

manual for GNU make中,他们在描述value函数时讨论了这个具体示例:

  

值函数提供了一种使用a值的方法   变量没有扩展。请注意,这不是   撤消已经发生的扩展;例如,如果你创建   一个简单的扩展变量,它的值在期间被扩展   定义;在这种情况下,value函数将返回相同的值   结果直接使用变量。

     

值函数的语法是:

 $(value variable)
     

注意变量是变量的名称;不是对该变量的引用。因此你通常不会使用   写一个'$'或括号。 (但是,您可以使用   如果您希望名称不是a,则名称中的变量引用   恒定的。)

     

此函数的结果是一个包含值的字符串   变量,没有任何扩展。例如,在此   生成文件:

 FOO = $PATH

 all:
         @echo $(FOO)
         @echo $(value FOO)
     

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

答案 1 :(得分:17)

make使用$作为自己的variable expansions。例如。单个字符变量$A或具有长名称的变量 - ${VAR}$(VAR)

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

all:
  @echo "Please execute next commands:"
  @echo 'setenv PATH /usr/local/greenhills/mips5/linux86:$$PATH'

另请注意,make ""''(双引号和单引号)不起任何作用,并且会逐字传递给shell。 (移除@符号以查看make向shell发送的内容。)为防止shell展开$PATH,第二行使用''