代码之家  ›  专栏  ›  技术社区  ›  peterh Eli

如何在具有多个模式的Makefile中创建模式规则?

  •  0
  • peterh Eli  · 技术社区  · 10 年前

    我想制作一个GNU Makefile,其中针对每个目标,如

    <dirname>/stamp-<stampname>:
    

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

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

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

    他们可以解决我的问题,但正如你所见,在我的情况下 % 需要指示。理想情况下,如果语法元素

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

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

    1 回复  |  直到 10 年前
        1
  •  1
  •   rveerd    10 年前

    也许是这样的:

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

    这假设 stamp- 文件始终存在,可以使用 ls 如果没有,则必须手动指定,例如。 STAMPS:=foo/stamp-1 bar/stamp-2 ... .