Makefile, исключая файлы - PullRequest
       8

Makefile, исключая файлы

6 голосов
/ 15 апреля 2011

Я создаю GNU Makefile, и у меня возникает следующая проблема:

У меня есть список исключаемых файлов (и каталогов), которые необходимо исключить из списка источников.Теперь удаление перечисленных файлов из списка не является большой проблемой.Я просто делаю следующее:

NEWSRC := $(shell find $(SOURCEDIR) -name '*.c')
EXCLUDES := $(shell cat ./$(TARGET12)_exclude.txt) #TARGET12 is a Makefile parameter
CSRC := $(filter-out $(EXCLUDES),$(NEWSRC))

Проблема в том, что ИСКЛЮЧЕНИЯ содержат каталог (не имя файла), и все имена файлов в одном каталоге также должны быть исключены.Например, если единственным членом переменной EXCLUDES является ../sources/filesystem/SomePath, то все файлы в этом каталоге также должны быть исключены из CSRC.Например, эти файлы могут быть:

../sources/filesystem/SomePath/something.c
../sources/filesystem/SomePath/src/something.c
../sources/filesystem/SomePath/Some1/src/something.c

Знаете ли вы, как это можно решить внутри Makefile?

Заранее спасибо!

Ответы [ 3 ]

6 голосов
/ 15 апреля 2011

Если элементы в NEWSRC обязательно начинаются с ../sources/filesystem/SomePath, как насчет добавления суффикса к EXCLUDES как следующего?

$(filter-out $(addsuffix /%,$(EXCLUDES)),$(NEWSRC))
2 голосов
/ 15 апреля 2011

Если вам разрешено изменять файлы ..._exclude.txt, вы можете использовать шаблоны.

foo.exclude.txt:

badFile.cc anotherBadFile.cc \
../sources/filesystem/SomePath/% \
yetAnotherBadFile.cc

Просто нажмите «%» наконец каждого каталога, который вы хотите исключить.

Если вам не разрешено изменять foo_exclude.txt, вы можете сделать то же самое в make-файле, но это уродливо:

EXCLUDES := $(shell cat ./$(TARGET12)_exclude.txt | sed -e 's|\/ |\/% |' -e 's|\/$$|\/%|')
0 голосов
/ 23 июля 2013

вы можете использовать

EXCLUDES := $(shell cat ./$(TARGET12)_exclude.txt)
EXCLUDES_FILE := { notdir $(EXCLUDES )}
CSRC := $(filter-out $(EXCLUDES_FILE),$(NEWSRC))

Дайте мне знать, если это работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...