我们可以使用patsubst函数将list中的../a替换为a.o,将../b.o替换为b.o。makefile代码如下:
list = ../a/a.o ../b.o
aa= ../a ../
new_list = $(patsubst ../a/%.o,%,$(filter-out $(aa),$(list))) $(patsubst %.o,%,$(filter $(aa),$(list)))
.PHONY: QQ
QQ:
@echo $(new_list)
在这个makefile中,我们定义了一个新的变量new_list来存储替换后的结果。使用patsubst函数,我们将../a/%.o替换为%,即去掉../a/和.o后缀,得到a和b。我们还使用filter-out函数过滤掉aa中的元素,再使用filter函数选择出aa中的元素,最终将它们拼接起来得到new_list。
当我们执行make QQ命令时,输出结果为:
a b
这说明我们成功地将../a/a.o替换为a,并将../b.o保留为b。