GNU make `foreach`:去掉最后一个列表成员中的逗号?
GNU make `foreach`: get rid of comma in the last list member?
我正在使用 foreach
在 GNU makefile 中生成列表:
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)\")
我正在使用 foreach
在 GNU makefile 中生成列表:
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)\")