【问题标题】:Makefile {a,b,c} globing equivalentMakefile {a,b,c} 通配符等效
【发布时间】:2018-05-10 21:41:44
【问题描述】:

如何在 Makefile 中做?

相当于下面的 bash:

$ rm -f {a,b,c}_foo/*.csv

这个 Makefile

$ cat Makefile
clean:
   rm -f {a,b,c}_foo/*.csv

不工作

【问题讨论】:

  • 您为什么要这样做?通常,您将拥有包含它创建的文件列表的 makefile 变量,并且您使用相同的列表进行删除。
  • rm -f $(add-prefix a b c,_foo/*.csv) 我个人更喜欢在 make 语法中做尽可能多的扩展。

标签: bash makefile gnu-make


【解决方案1】:

你需要使用 bash,而不是 sh。

生成文件:

SHELL=/bin/bash

clean:
    rm -f {a,b,c}_foo/*.csv

【讨论】:

    【解决方案2】:

    gmtt 有一个 glob-matcher - 但只有标准的 glob 语法,而不是 bash 的扩展语法。在你的情况下,这已经足够了:

    include gmtt/gmtt.mk
    
    allfiles := a_foo/x.csv a_foo/x.txt b_foo/b.csv c_foo/c.csv c_foo/read.me
    
    $(foreach thisfile,$(allfiles),$(if $(call glob-match,$(thisfile),[abc]_foo/*.csv),$(info deleting $(thisfile))))
    

    【讨论】:

      猜你喜欢
      • 2011-08-01
      • 2013-11-07
      • 1970-01-01
      • 2023-04-09
      • 2014-06-19
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 2010-12-08
      相关资源
      最近更新 更多