2016-04-25 2 views
0

Учитывая в Makefile обязательного условияФильтр Makefile предпосылки

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

my_target: $(PY_FILES) 
    do_something $(PY_FILES) 

Можно ли назвать do_something на подмножестве, т.е. исключить все питон файлы, которые соответствуют шаблону, например, */test/*?

Я понимаю, что $(filter-out pattern, text) может делать что-то подобное, но шаблон должен быть списком файлов, которые я хочу исключить.

В этом случае я мог бы, как хорошо find с -not и сохранить результат в другой предпосылкой которой является то, что я пытаюсь избежать - я хочу, чтобы повторно использовать PY_FILES PREREQ.

+0

'pattern' должен быть * pattern *, который соответствует файлам, которые вы хотите исключить. К сожалению, шаблоны поддерживают только один шаблон, поэтому вы не можете '' (отфильтровать) 'шаблон, который легко сочетается с' */test/* '. Вы * можете * игнорировать тех, у кого 'find' легко, хотя, как вы указали. –

ответ

0

Нет хорошего встроенного способа, чтобы соответствовать шаблону стиля */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)' проще, чем повторная фильтрация. –

Смежные вопросы