【问题标题】:Make file echo displaying "$PATH" string使文件回显显示“$PATH”字符串
【发布时间】:2011-04-12 01:45:45
【问题描述】:

我正在尝试强制 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 " 的任何组合都没有得到所需的结果...

有什么建议吗?

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    manual for GNU make中,他们在描述value函数时谈到了这个具体的例子:

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

    值函数的语法是:

     $(value variable)
    

    注意变量是变量名;不是对该变量的引用。因此,您通常不会使用 写入时使用“$”或括号。 (但是,您可以使用 如果您希望名称不是 常数。)

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

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

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

    【讨论】:

    • 感谢您指出变量声明是在目标之外完成的。它们可以在目标中定义吗?
    【解决方案2】:

    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,第二行使用''

    【讨论】:

    • 谢谢你,给了我方向! @echo "setenv PATH /usr/local/greenhills/mips5/linux86:$$PATH" 要打印整个 $PATH,但 @echo 'setenv PATH /usr/local/greenhills/mips5/linux86:$$PATH'做好工作!
    • 因为,正如我所注意到的,""'' 被传递给 shell。在"" shell 内会扩展$PATH,但不会在'' 内。
    • 感谢提醒,我已经很久没有使用 make 了
    • 老实说,我自己总是忘记这一点,一开始也犯了同样的错误;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    相关资源
    最近更新 更多