gpt4 book ai didi

makefile - 如何通过通配子目录自动生成make目标列表?

转载 作者:行者123 更新时间:2023-12-01 22:29:29 24 4
gpt4 key购买 nike

我想使用一个 Makefile 在数百个子目录中生成目标。每个子目录都是一个日期/时间戳,如下所示:20120119_153957,它与以下模式?????????_?????? 匹配。没有其他子目录与此模式匹配。

我想要生成的一个目标名为?????????_??????/graph.pdf。我有一个名为 make_graph 的脚本,它将根据给定的子目录名称生成图表。但我不确定如何编写一个 Makefile 来自动全局所有子目录并以编程方式生成这些目标。

例如,代码 SUBDIRS:=?????????_?????? 似乎正确地全局显示了所有子目录。我可以检查这个规则:

.PHONY: print
print:
echo $(SUBDIRS)

但是这个变量赋值

TARGETS:=$(SUBDIRS:%=%/graph.pdf)

似乎没有达到我的预期并分配了很多很多目标。相反,以下规则仅打印一个目标。

.PHONY: print
print:
echo $(TARGETS)

令人困惑的是,SUBDIRS 应该具有正确的子目录,但 TARGET 只有一个文件。

最佳答案

在您的示例中,全局匹配由 shell 执行。

GNU Make 内置 wildcard function ,您可以按如下方式使用:

SUBDIRS := $(wildcard ????????_??????)

现在您可以使用此变量来构建目标列表:

.PHONY : all
all : $(SUBDIRS:%=%/graph.pdf)

%/graph.pdf : # list prerequisites here.
# recipe to make '$@' in directory '$(@D)' from '$^'.

另请参阅:pattern rules , automatic variables

关于makefile - 如何通过通配子目录自动生成make目标列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8937500/

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