(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)
哪个更容易阅读。
我有工作生成文件代码,它首先找到 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)
哪个更容易阅读。