如何在gnu make中进行shell变量替换

时间:2015-10-05 22:51:47

标签: shell makefile gnu-make

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

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

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

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

在我看来,贝壳中的美元替代完全被削掉了。

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

2 个答案:

答案 0 :(得分:0)

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

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

all: 
         echo $(BIN)

答案 1 :(得分:0)

make展开它找到的所有$(something)${something},并将其替换为 make 变量something的值。因此,如果您想使用shell变量并阻止make扩展它们,只需将$符号加倍(如果它受到单个make扩展的影响,则需要更多$个符号)。在你的情况下:

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

应该有用。