【问题标题】:How to generate list of make targets automatically by globbing subdirectories?如何通过 globbing 子目录自动生成 make 目标列表?
【发布时间】:2012-01-20 06:19:35
【问题描述】:

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

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

例如,代码 SUBDIRS:=????????_?????? 似乎正确地 glob 所有子目录。我可以检查这条规则:

.PHONY: print
print:
        echo $(SUBDIRS)

但是这个变量赋值

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

似乎没有做我期望的事情并分配了很多很多目标。相反,以下规则只打印一个目标。

.PHONY: print
print:
        echo $(TARGETS)

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

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    在您的示例中,全局匹配由 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 rulesautomatic variables

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-14
      • 2013-12-16
      • 1970-01-01
      • 2014-01-20
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多