我试图强制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函数的语法是:
Run Code Online (Sandbox Code Playgroud)$(value variable)请注意,变量是变量的名称; 不是对该变量的引用.因此,在编写时通常不会使用'$'或括号.(但是,如果您希望名称不是常量,则可以在名称中使用变量引用.)
此函数的结果是包含变量值的字符串,不会发生任何扩展.例如,在这个makefile中:
Run Code Online (Sandbox Code Playgroud)FOO = $PATH all: @echo $(FOO) @echo $(value FOO)第一个输出行是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,第二行使用''.