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

loading...


0

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

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

当我将定义打印到文件中时

echo -e "$(MY_DEFINES)";

我得到以下内容:

DEF1,
DEF2,

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

DEF1,
DEF2

loading...

2回答

  • 0

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

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

    另一种方法是为每个元素添加 ,\n 作为第一个元素的前缀:

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

  • 2

    逐步解决方案可能是:

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

评论

暂时没有评论!