2012-07-02 3 views
1

Я использую использование подстановочных знаков в Makefile, чтобы выбрать все файлы, которые заканчиваются суффиксом .c. Это выглядит так: SRCS := $(wildcard *.c). В других частях Makefile SRCS используется.Makefile negative wildcard

Теперь мне нужно сделать так, чтобы данный файл не включался в переменную SRCS. То, как я нашел, - это объединить директиву оболочки с некоторыми командами консоли: SRC :=$(shell find . -name "*.c" | grep -v "file_to_exclude.c" | xargs)

Это прекрасно работает, но я хотел бы знать, есть ли другой более элегантный способ, чем тот, который использует только подстановочные знаки.

ответ

6

Вы можете использовать $ (отфильтровывает P, T) команда ...

SRCS := $(filter-out icky-file.c,$(wildcard *.c)) 

Конечно, используя сценарий оболочки в значительной степени принимать вещи на другой уровень, так как тогда вы не ограниченные командами Make.

Получил кучу нелюбов?

NOWANTS := one.c two.c three.c 
SRCS := $(filter-out $(NOWANTS),$(wildcard *.c)) 
+0

Я не знаю об отфильтрованной команде! Благодарю. –

+0

В Linux установите 'make-doc', затем просмотрите полную документацию в'/usr/share/doc/make-doc'. или .... [онлайн-документация] (http://www.gnu.org/software/make/manual/make.html) – lornix