GNU make`foreach`:删除最后一个列表成员中的逗号?

时间:2018-12-10 10:50:58

标签: makefile gnu-make

我正在使用foreach在GNU makefile中生成一个列表:

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

当我将定义打印到文件中

echo -e "$(MY_DEFINES)";

我得到以下信息:

DEF1,
DEF2,

如何删除最后一个列表成员中的逗号?
我的输出必须是:

DEF1,
DEF2

2 个答案:

答案 0 :(得分:2)

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

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

另一种方法是在第一个元素之外的每个元素前面加上,\n

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

答案 1 :(得分:0)

分步解决方案可以是:

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之一。