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