Makefile 如何在目录列表上应用通配符
我有以下目录结构:Makefile 如何在目录列表上应用通配符,makefile,pattern-matching,wildcard,Makefile,Pattern Matching,Wildcard,我有以下目录结构: 根/ 构建/#我在这个目录中 dir1/ 建造 obj#.o此文件中的文件 dir2/ 建造 obj#.o此文件中的文件 dir3/ 建造 obj#.o此文件中的文件 如您所见,我的makefile位于根目录/build中-makefile将变量定义为: DIRS = dir1 dir2 dir3 #there could be many OBJDIRS = $(DIRS:%=../%/build/obj) $(info $(OBJDIRS
- 根/
- 构建/
#我在这个目录中
- dir1/
- 建造
- obj
#.o此文件中的文件
- obj
- 建造
- dir2/
- 建造
- obj
#.o此文件中的文件
- obj
- 建造
- dir3/
- 建造
- obj
#.o此文件中的文件
- obj
- 建造
- 构建/
根目录/build
中-makefile将变量定义为:
DIRS = dir1 dir2 dir3 #there could be many
OBJDIRS = $(DIRS:%=../%/build/obj)
$(info $(OBJDIRS)) #lets print the list
然后我尝试创建一个变量,如下所示:
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
现在我想获得所有dir*
目录的obj
目录中所有对象文件的列表。怎么弄到的?我试过这个:
OBJECTS = $(wildcard $(OBJDIRS)/*.o)
$(info $(OBJECTS))
它只打印此文件:
../dir1/build/obj
通配符在目录列表上似乎不起作用。有什么办法可以做到这一点吗?我认为你目前的尝试有两个地方不对劲
$(通配符)
不使用%作为其通配符。它使用*。所以您需要$(通配符$(OBJDIRS)/*.o)
来解决这个问题
$(OBJDIRS)/*.o
将扩展到。/dir1/build/obj../dir2/build/obj../dir3/build/obj/*.o
。你会注意到,这不是你想要的。因此,您需要使用$(addsuffix/*.o,$(OBJDIRS))
或其他替换来生成所需的通配符模式列表
1.Oops%
是一个打字错误。我修好了。我的makefile同时尝试了%
和*
。两种情况下的结果是相同的。2.我明白了。使用*
通配符,我希望$(通配符)调用会列出dir1`条目和dir3
下匹配的任何内容(或最后出现的任何其他路径)。