GNU make `foreach`: избавиться от запятой в последнем члене списка? - PullRequest
0 голосов
/ 10 декабря 2018

Я использую foreach для создания списка в make-файле GNU:

DEFINES += DEF1
DEFINES += DEF2
...
MY_DEFINES := $(foreach define,$(DEFINES),\"$(define)\",\n)

Когда я печатаю определения в файл

echo -e "$(MY_DEFINES)";

, я получаю следующее:

DEF1,
DEF2,

Как избавиться от запятой в последнем члене списка?
Мой вывод должен быть:

DEF1,
DEF2

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Один способ использовать head для обрезания последних 2 байтов, например:

echo -e "$(MY_DEFINES)" | head --bytes=-2

Другой способ - префикс каждого элемента с ,\n отдельно от первого элемента:

MY_DEFINES := $(firstword ${DEFINES})$(foreach define,$(wordlist 2,$(words ${DEFINES}),${DEFINES}),\n,\"$(define)\")
0 голосов
/ 10 декабря 2018

Пошаговое решение может быть следующим:

COMA    := ,
DEFINES += DEF1
DEFINES += DEF2
...
MY_DEFINES := $(patsubst %,%$(COMA),$(DEFINES))FOOBAR
MY_DEFINES := $(patsubst %$(COMA)FOOBAR,%,$(MY_DEFINES))
MY_DEFINES := $(patsubst %,%\n,$(MY_DEFINES))

Где FOOBAR - любая строка, в которой вы на 100% уверены, что никогда не будете частью одной из ваших DEFINES.

...