значение make-файла GNU для переменной, но только если она еще не содержит его - PullRequest
0 голосов
/ 14 января 2019

Итак, основываясь на определенных критериях, которые я хочу добавить к переменной, скажем:

LIST += BOB

Но может быть более одного места, где я мог бы добавить BOB, поэтому давайте возьмем следующий фрагмент кода:

LIST += BOB
LIST += FRED
LIST += TED
LIST += BOB

Я хочу получить LIST, содержащий BOB FRED TED, поэтому я не хочу дублировать дополнительный BOB. Я также хочу сохранить порядок (иначе, я думаю, я мог бы использовать sort).

Есть ли умный способ сделать это? - Я полагаю, что сначала я могу просто найти текст в переменной, но, кажется, это слишком затянуто. Так есть ли функция типа «добавить, если не существует»?

1 Ответ

0 голосов
/ 14 января 2019

Если LIST просто развернуть (LIST :=), вы можете просто LIST += $(filter-out $(LIST),BOB):

$ cat Makefile
LIST :=
LIST += $(filter-out $(LIST),BOB)
LIST += $(filter-out $(LIST),FRED)
LIST += $(filter-out $(LIST),TED)
LIST += $(filter-out $(LIST),BOB)

all:
    $(info $(LIST))
$ make
 BOB FRED TED 
make: 'all' is up to date.

Примечание: Если переменная объявлена ​​как просто развернутая, она остается такой, если вы ее не измените, например, с LIST = ...

...