过滤器生成文件的先决条件
问题描述:
给出一个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。
答
有没有很好的内置方式来匹配*/test/*
风格模式与内置插件。模式匹配并不是那么复杂。
你可以尝试这样的事情,但是在find
处分割文件的时间可能会更好,并且最终会变得更有用。
define testfilter
$(foreach f,$1,$(if $(findstring /test/,$f),,$f))
endef
my_target: $(PY_FILES)
do_something $(call testfilter,$(PY_FILES))
+0
@ComeRaczy感谢您的捅,但使用'$(if)'比重新过滤更简单。 –
'pattern'必须是* pattern *与您想要排除的文件相匹配。不幸的是,make模式只支持单个通配符元素,所以你不能'$(过滤掉)'容易匹配'*/test/*'的模式。正如你所指出的那样,你可以很容易地忽略那些带有find的东西。 –