filter_out нежелательный материал из переменного содержимого в GNUmake - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть переменные, как показано ниже:

TEMP_VARIABLE := proj1 proj2 proj3 proj4
PROJ := proj2

Я хочу удалить все проекты, т.е. (proj1, proj3, proj4) из TEMP_VARIABLE. Для этого у меня есть метод разбора ниже в моем Makefile.

TEMP_VARIABLE  := $(foreach dir,$(TEMP_VARIABLE), $(ifneq $(,$(findstring $(dir),$(PROJ))) $(filter-out $(dir),$(TEMP_VARIABLE))))

Когда я запускаю свой make-файл и пытаюсь отобразить TEMP_VARIABLE, он ничего не печатает. И отметить, что есть в этой переменной.

Что-то не так в моем foreach анализе выше?

1 Ответ

0 голосов
/ 21 апреля 2020

Проблема

$(,$(findstring $(dir),$(PROJ)))

Вряд ли у вас есть макрос с именем , или ,proj2. Чтобы проверить ошибки такого рода, всегда запускайте make с --warn-undefined-variables. Я получил:

$ make -f a --warn
a:3: warning: undefined variable ','
a:3: warning: undefined variable 'ifneq  proj2 proj3 proj4'
a:3: warning: undefined variable ',proj2'
a:3: warning: undefined variable 'ifneq  proj1 proj3 proj4'
a:3: warning: undefined variable ','
a:3: warning: undefined variable 'ifneq  proj1 proj2 proj4'
a:3: warning: undefined variable ','
a:3: warning: undefined variable 'ifneq  proj1 proj2 proj3'

Что вы действительно хотели

Жизнь обычно проще. Как насчет использования $(filter …)?

$ cat a
TEMP_VARIABLE := proj1 proj2 proj3 proj4
PROJ := proj2
TEMP_VARIABLE := $(filter ${PROJ},${TEMP_VARIABLE})
$(error [${TEMP_VARIABLE}])

, дающего

$ make -f a --warn
a:4: *** [proj2].  Stop.
...