(Makefile) 同一行多个字符串替换

(Makefile) Multiple string replacement on the same line

我有工作生成文件代码,它首先找到 u 文件夹中的所有文件,然后删除 ./u/,最后将 .c 的后扩展名替换为 .o .有没有办法让它变成一个或两个衬里?感觉这段代码看起来比较乱,有待改进

UTILS=$(wildcard ./u/*.c)
TEMP=$(UTILS:./u/%=%)
OBJ=$(TEMP:.c=.o)

你不能嵌套 $(var:x=y) 样式替换,但你可以嵌套等效的 patsubst 函数调用,所以你可以这样写:

OBJ=$(patsubst %.c, %.o, $(patsubst ./u/%,%,$(wildcard ./u/*.c)))

你可以简化为:

OBJ=$(patsubst ./u/%.c,%.o,$(wildcard ./u/*.c))

但是考虑到这种简化,您可以对原始版本做同样的事情:

UTILS=$(wildcard ./u/*.c)
OBJ=$(UTILS:./u/%.c=%.o)

哪个更容易阅读。