Makefile GNU make`foreach`:去掉最后一个列表成员中的逗号?

Makefile GNU make`foreach`:去掉最后一个列表成员中的逗号?,makefile,gnu-make,Makefile,Gnu Make,我正在使用foreach在GNU生成文件中生成一个列表: DEFINES += DEF1 DEFINES += DEF2 ... MY_DEFINES := $(foreach define,$(DEFINES),\"$(define)\",\n) 当我将定义打印到文件中时 echo -e "$(MY_DEFINES)"; 我得到以下信息: DEF1, DEF2, 如何去掉最后一个列表成员中的逗号? 我的输出需要是: DEF1, DEF2 逐步解决方案可以是: COMA := ,

我正在使用
foreach
在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%确定永远不会成为您的
定义之一的任何字符串

一步一步的解决方案可以是:

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%确定永远不会成为您的
定义的任何字符串的一部分的任何字符串,可以使用
头来切断最后2个字节,例如:

echo -e "$(MY_DEFINES)" | head --bytes=-2
另一种方法是在每个元素前面加上
,\n
,除了第一个元素之外:

MY_DEFINES := $(firstword ${DEFINES})$(foreach define,$(wordlist 2,$(words ${DEFINES}),${DEFINES}),\n,\"$(define)\")

使用
head
切断最后2个字节的一种方法,例如:

echo -e "$(MY_DEFINES)" | head --bytes=-2
另一种方法是在每个元素前面加上
,\n
,除了第一个元素之外:

MY_DEFINES := $(firstword ${DEFINES})$(foreach define,$(wordlist 2,$(words ${DEFINES}),${DEFINES}),\n,\"$(define)\")

我认为这将使第一个单词不带连字符(“”),最后一个单词不带\n,尽管两者都很容易修复。我认为这将使第一个单词不带连字符(“”),最后一个单词不带\n,尽管两者都很容易修复。