【问题标题】:How to use Bash parameter substitution in a Makefile?如何在 Makefile 中使用 Bash 参数替换?
【发布时间】:2017-02-25 22:03:59
【问题描述】:

我有以下Makefile,我想使用Bash parameter substitution 语法如下:

SHELL:=/bin/bash
Foo=Bar
all:
  @echo ${Foo}
  @echo ${Foo/Bar/OK}

但是它没有按预期工作,因为第二个echo 命令的输出为空:

$ make
Bar
(empty)

虽然直接在 shell 中调用时效果很好:

$ Foo=Bar; echo ${Foo/Bar/OK}
OK

如何在 Makefile 中使用上述语法?

【问题讨论】:

    标签: bash shell makefile syntax string-substitution


    【解决方案1】:

    如果你想让 shell 扩展变量,你必须使用 shell 变量,而不是 make 变量。 ${Foo/Bar/OK} 是一个 make 变量,字面意思是 Foo/Bar/OK

    如果您想使用 shell 变量替换,您必须将该值分配给 shell 变量:

    all:
            Foo='$(Foo)'; echo $${Foo/Bar/OK}
    

    请注意,我们使用双美元 $$ 来转义美元符号,以便 make 不会尝试扩展它。

    强烈建议您不要将@ 添加到您的规则中,除非您确定它们有效。这是我看到的最常见的错误;如果人们不使用@,他们会看到命令 make 正在调用,然后他们会更好地了解 make 的工作原理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-29
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      相关资源
      最近更新 更多