Я использую foreach для создания списка в make-файле GNU:
DEFINES += DEF1
DEFINES += DEF2
...
MY_DEFINES := $(foreach define,$(DEFINES),\"$(define)\",\n)
Когда я печатаю определения в файл
echo -e "$(MY_DEFINES)";
Получаю следующее:
DEF1,
DEF2,
Как избавиться от запятой в последнем элементе списка?
Мой результат должен быть:
DEF1,
DEF2





Пошаговым решением может быть:
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.
Один из способов - использовать head для обрезки последних 2 байтов, например:
echo -e "$(MY_DEFINES)" | head --bytes=-2
Другой способ - добавить к каждому элементу префикс ,\n, кроме первого:
MY_DEFINES := $(firstword ${DEFINES})$(foreach define,$(wordlist 2,$(words ${DEFINES}),${DEFINES}),\n,\"$(define)\")
Я думаю, это оставит первое слово без дефиса (""), а последнее без \ n, хотя оба слова легко исправить.