我试图强制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 "
的任何组合都没有得到必需的结果......
有什么建议吗?
答案 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
,第二行使用''
。