gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:06:51 24 4
gpt4 key购买 nike

我有这个目录结构:

  • 根/
    • build/#我在这个目录中
    • 目录 1/
      • build
        • obj #.o 里面的文件
    • 目录2/
      • build
        • obj #.o 里面的文件
    • 目录 3/
      • build
        • obj #.o 里面的文件

如您所见,我的 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

现在我想获取所有 dir* 目录的 obj 目录中所有目标文件的列表。如何得到它?我试过这个:

OBJECTS = $(wildcard $(OBJDIRS)/*.o)
$(info $(OBJECTS))

只打印这个:

../dir1/build/obj 

通配符 似乎不适用于目录列表。有什么办法可以实现吗?

最佳答案

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

  1. $(wildcard) 不使用 % 作为其通配符。它使用 *。所以你需要 $(wildcard $(OBJDIRS)/*.o) 来解决这个问题。

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

关于makefile - 如何在目录列表中应用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24544191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com