【问题标题】:How to make a pattern rule in a Makefile with multiple patterns?如何在具有多个模式的 Makefile 中创建模式规则?
【发布时间】:2016-09-08 13:24:35
【问题描述】:

我想制作一个 GNU Makefile,其中每个目标都喜欢

<dirname>/stamp-<stampname>:

执行以下命令:

cd <dirname> && make stamp-<stampname>

正如我在这里所读到的,所谓的pattern rules 可以做一些非常相似的事情,例如,调用 C 编译器从任何来源 (.c) 生成 .o-s:

%.o: %.c
  $(CC) -o ...

他们可以解决我的问题,但正如您所见,就我而言,需要多个 % 指令。理想情况下,如果一个语法元素像

%1/stamp-%2:
  cd %1 && make stamp-%2

会存在,它会解决一切。但事实并非如此。该任务是否存在一些解决方法?

【问题讨论】:

    标签: makefile pattern-matching gnu-make


    【解决方案1】:

    大概是这样的:

    STAMPS:=$(shell ls **/stamp-*)
    
    all: $(STAMPS)
    
    .PHONY: $(STAMPS)
    $(STAMPS):
        cd $(dir $@) && $(MAKE) $(notdir $@)
    

    这假定stamp- 文件始终存在并且可以使用ls 收集。如果不是,您将不得不手动指定它们,例如STAMPS:=foo/stamp-1 bar/stamp-2 ....

    【讨论】:

    • 使用wildcard 会比ls 更好(除非你真的需要** glob)。
    猜你喜欢
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多