如何在目录列表中应用通配符

时间:2014-07-03 02:53:11

标签: makefile pattern-matching wildcard

我有这个目录结构:

  • 根/
    • build / #I'm inside this directory
    • DIR1 /
      • 构建
        • obj #.o files inside this
    • DIR2 /
      • 构建
        • obj #.o files inside this
    • DIR3 /
      • 构建
        • obj #.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似乎不适用于目录列表。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

我发现你当前的尝试有两个问题。

  1. $(wildcard)不使用作为其通配符。它使用 * 。因此,您需要$(wildcard $(OBJDIRS)/*.o)来解决此问题。

  2. $(OBJDIRS)/*.o将扩展为../dir1/build/obj ../dir2/build/obj ../dir3/build/obj/*.o。您注意到的不是您想要的。因此,您需要使用$(addsuffix /*.o,$(OBJDIRS))或其他替换来生成所需的通配符模式列表。