【问题标题】:How to dynamically generate Makefile targets如何动态生成 Makefile 目标
【发布时间】:2018-05-21 09:01:08
【问题描述】:

假设我有几个名为 foo.cbar.cbaz.c 的文件...我想为每个运行构建任务的文件创建一个 Makefile 目标。

foo:
  make foo.c
.PHONY: foo

foo.c:
  run build foo

bar:
  make bar.c
.PHONY: bar

bar.c:
  run build bar

...

我基本上只是想做make foo,它构建了make foo.c。但是我有 x 个文件,并且希望为每个文件创建任务。如何做到这一点。比如:

FILES = $(foo bar baz ...)

$(FILES): $(FILES)
  make $(FILE)
.PHONY: $(FILE)

$(FILES).c: $(FILES)
  run build $(FILE)

但所有文件都是相互独立的。

【问题讨论】:

    标签: makefile gnu-make


    【解决方案1】:

    您可以将pattern rules 用于.c 目标,将static pattern rules 用于必须是虚假目标的目标(即您的示例中的foobar):

    targets := foo bar
    
    .PHONY: $(targets)
    
    # static pattern rule
    $(targets): %:
       make $*.c
    
    # pattern rule
    %.c:
       run build $*
    

    【讨论】:

    • 这个答案让我走得更远,但我不知道如何制作一个运行所有目标的通用make build
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 2013-04-20
    • 2016-03-02
    • 2010-09-10
    • 1970-01-01
    相关资源
    最近更新 更多