我有这个目录结构:
#I'm inside this directory
#.o files inside this
#.o files inside this
#.o files inside this
如您所见,我的makefile位于root/build
中 - makefile将变量定义为:
DIRS = dir1 dir2 dir3 #there could be many
然后我尝试创建一个变量:
OBJDIRS = $(DIRS:%=../%/build/obj)
$(info $(OBJDIRS)) #lets print the list
此处info
打印此列表:
../dir1/build/obj ../dir2/build/obj ../dir3/build/obj
现在我想得到所有obj
目录的dir*
目录中所有目标文件的列表。怎么做到的?我试过这个:
OBJECTS = $(wildcard $(OBJDIRS)/*.o)
$(info $(OBJECTS))
仅打印此内容:
../dir1/build/obj
wildcard
似乎不适用于目录列表。有没有办法实现这个目标?
答案 0 :(得分:1)
我发现你当前的尝试有两个问题。
$(wildcard)
不使用%作为其通配符。它使用 * 。因此,您需要$(wildcard $(OBJDIRS)/*.o)
来解决此问题。
$(OBJDIRS)/*.o
将扩展为../dir1/build/obj ../dir2/build/obj ../dir3/build/obj/*.o
。您注意到的不是您想要的。因此,您需要使用$(addsuffix /*.o,$(OBJDIRS))
或其他替换来生成所需的通配符模式列表。