Два вызова здесь:
-P
поддерживает только один шаблон Таким образом, если вы установите greplist.txt
на
.\.var$
.\.foo$
.\.varfoo$
и просто беги
grep -vi -f greplist.txt myfile.txt > newfile.txt
Вы должны получить то, что ищете.
В make
знак процента используется для сопоставления с шаблоном, и для этого требуется один в цели, а также (по крайней мере )один в предварительных требованиях:
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
В этом make-файле мы указываем, что для создания чего-то, имя файла которого заканчивается на .o
, вам нужен файл с таким же префиксом, но затем заканчивающийся на .c
, а не на .o
Чтобы иметь возможность создавать эти правила, вы, очевидно, должны иметь возможность ссылаться на цель, а также на предпосылки; здесь появляются переменные $@
и $<
. $@
означает «цель этого правила», а $<
означает «первое указанное предварительное условие этого правила». Если вам нужно создать команду, которая использует все предварительные условия (, например, для связывания исполняемого файла ), вы можете использовать переменную$^
:
%: %.o lib.o
$(CC) $(LDFLAGS) -o $@ $^
Если вы скомбинируете приведенные выше два примера фрагментов make-файла в один make-файл, и у вас есть файл 'lib.c' с некоторым общим кодом, который вы хотите использовать в нескольких программах на C в том же каталоге, вы можете добавить любой случайный .c
файл, скажем foo.c
, и скомпилируйте его в программу foo
, которая также ссылается на код в lib.c
, не требуя каких-либо изменений в вашем make-файле.
Обратите внимание, что также возможно иметь шаблоны с одной и той же целью, если предпосылки различаются; например, следующее будет работать:
%.o: %.c
$(CC).....
%.o: %.cpp
$(CXX).....
, то есть он будет работать так, как ожидалось, если в этом каталоге нет исходных файлов C++, которые имеют то же имя (без расширения ), что и исходный файл C. Если это действительно так,версия C++ будет проигнорирована, и вместо нее будет скомпилирован исходный код C (, поскольку правило C указано первым в make-файле)
Для получения дополнительной информации см. соответствующий раздел в руководстве GNU make.