【问题标题】:How to do shell variable replacement in gnu make如何在 gnu make 中进行 shell 变量替换
【发布时间】:2015-10-05 22:51:46
【问题描述】:

这是一个简化的 Makefile,但暴露了我面临的同样问题:

all:
        for i in *.pod; do g=${i%%.pod}; echo ${g};done

我想要的是得到没有后缀的文件名。但是当我运行 make 时,我看到了这个:

for i in *.pod; do g=; echo ;done

在我看来,shell 中的美元替代品已被完全修剪掉。

这样做的正确方法是什么?

【问题讨论】:

  • 您真的想回显几个不带后缀的文件名,还是想在 shell 命令中进行一般变量替换?
  • 为了避免将$ 解释为表示替代,您需要将其翻倍$$

标签: shell makefile gnu-make


【解决方案1】:

以下模式替换就足够了(确保使用制表符):

SRC = $(wildcard *.pod)
BIN = $(patsubst %.pod;,%,$(SRC))

all: 
         echo $(BIN)

【讨论】:

    【解决方案2】:

    make 扩展它找到的所有$(something)${something} 并将它们替换为ma​​ke 变量something 的值。因此,如果您想使用 shell 变量并防止 make 扩展它们,只需将 $ 符号加倍(如果它受制于一次 make 扩展,否则您需要更多 $ 符号)。在你的情况下:

    all:
        for i in *.pod; do g=$${i%%.pod}; echo $${g}; done
    

    应该可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      相关资源
      最近更新 更多