问题:
回答:
比方说你在 makefile 里定义了一个变量,内容是一堆 .c 文件的的名字,如
SRC = aaa.c
你可以用 patsubst 根据 某种模式,将这些名字改成另外的,比如将这些 .c 文件的名字变成 .s 为后缀的名字:
NEW = $(patsubst "%.c", "%.s", ${SRC})
这样 NEW 这个变量中,就记录了 aaa.s
追问
我还有一点不太明白,这样的话,改成这样不行吗? NEW=$(subst .c, .s, ${SRC})效果不是一样的吗?啥时用%啥时不用啊?
回答
在我给的例子中,确实一样, 但是某些情况下,就不一样了。因为subst 会把每一个 .c 都替换成 .s, 而我上面例子中的 patsubst 只会把最末尾的替换。 给你一个例子,你自己体会一下就明白了 SRC = a.c b.c m.c.c all: echo $(patsubst "%.c","%.s",${SRC}) echo $(subst .c,.s, ${SRC}) 自己执行一下,就知道区别了。