【问题标题】:Filter makefile prerequisites过滤 makefile 先决条件
【发布时间】:2016-08-18 23:24:53
【问题描述】:

给定一个 Makefile 先决条件

PY_FILES := $(shell find . -type f -name *.py)

my_target: $(PY_FILES)
  do_something $(PY_FILES)

是否可以在其子集上调用do_something,即排除所有匹配模式的python文件,例如*/test/*?

我的理解是$(filter-out pattern, text) 可以做类似的事情,但模式必须是我要排除的文件列表。

在这种情况下,我也可以将find-not 保存到另一个先决条件,这是我试图避免的——我想重用PY_FILES prereq。

【问题讨论】:

  • pattern 必须是与您要排除的文件匹配的 pattern。不幸的是,使模式仅支持单个通配符元素,因此您无法轻松地将$(filter-out) 匹配到*/test/* 的模式。您可以忽略那些find 的人,尽管如您所指。

标签: makefile gnu-make


【解决方案1】:

没有很好的内置方法可以将 */test/* 样式模式与 make 内置函数相匹配。模式匹配并没有那么复杂。

您可以尝试类似的方法,但在find 时间拆分文件可能会表现得更好,最终会更有用。

define testfilter
    $(foreach f,$1,$(if $(findstring /test/,$f),,$f))
endef

my_target: $(PY_FILES)
        do_something $(call testfilter,$(PY_FILES))

【讨论】:

  • @ComeRaczy 感谢您对此的关注,但使用 $(if) 比重新过滤更简单。
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 2014-03-08
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多