makefile的filter的匹配问题
说明 :
项目代码都在Src下面,Src当前目录下面有个abc.cpp
Src下面有个A目录,A目录下面有个abc.cpp
Src下面有个B目录,B目录下面有个abc.cpp
(主要就是不同路径下面存在同名cpp文件)
我希望实现的就是:
./Src下面的abc.cpp生成的abc.o 还放在./Src下
./Src/A下面的abc.cpp生成的abc.o 还放在./Src/A下
./Src/B下面的abc.cpp生成的abc.o 还放在./Src/B下
于是makefile我是类似下面这样写的
DIR = ./Src
DIR_A = $(DIR)/A
DIR_B = $(DIR)/B
OBJS = $(DIR)/abc.o $(DIR_A)/abc.o $(DIR_B)/abc.o
#...省略
$(filter $(DIR)/%.o, $(OBJS)): $(DIR)/%.o: $(DIR)/%.cpp
g++ -c $< -o $@
$(filter $(DIR_A)/%.o, $(OBJS)): $(DIR_A)/%.o: $(DIR_A)/%.cpp
g++ -c $< -o $@
$(filter $(DIR_B)/%.o, $(OBJS)): $(DIR_B)/%.o: $(DIR_B)/%.cpp
g++ -c $< -o $@
这样写虽然最终也编译出结果了,但是报了警告,就是说./Src/A/abc.o的生成规则出现重合,./Src/B/abc.o的生成规则出现重合
然后我就输出了 $(filter $(DIR)/%.o, $(OBJS)) 发现它过滤的不仅仅是当前目录下面的o文件,还包括子目录下面的o文件
现在我想仅仅过滤指定目录下面的o文件,但不包括其子目录的,该如何实现