Makefile 通配符到变量到逗号连接字符串

Makefile 通配符到变量到逗号连接字符串,makefile,gnu-make,Makefile,Gnu Make,我使用makefile来控制软件管道。我需要传递一个以逗号分隔的目录列表作为参数,即 --dirs output/a,output/b,output/c 这些都是未知的。我想做一些类似的事情: dirs = output/* dirString = ",".join(dirs) 这可能吗?shell用于执行命令,因此您可以调用任何可用的实用程序来构造命令行。例如,在类Unix系统上: output/result: output/* echo $+ | sed 's/ /,/g' |

我使用makefile来控制软件管道。我需要传递一个以逗号分隔的目录列表作为参数,即

--dirs output/a,output/b,output/c
这些都是未知的。我想做一些类似的事情:

dirs = output/*
dirString = ",".join(dirs)

这可能吗?

shell用于执行命令,因此您可以调用任何可用的实用程序来构造命令行。例如,在类Unix系统上:

output/result: output/*
    echo $+ | sed 's/ /,/g' | xargs command > $@

通常,我觉得用自己的方式做这些事情比较好。Noddy解析使得
的处理比它应该做的更复杂:-(


接受答案中的配方显然是
command$(调用逗号分隔,$+)

我认为这行不通:
$(调用…)
在文本参数
$+
上执行,该参数将在以后的处理阶段展开。@reinierpost否,如果按照下面的帖子在配方中使用,则没有问题。整个配方由make作为一个递归展开的变量保存。它由make展开,就像make决定需要运行所述配方一样。此时,all目标宏(
$@
$*
等)是有效的,并且可以按预期进行扩展。确实有效,对此表示抱歉。这已经解释过了,但我还没有完全理解。
space :=
space += # $space is a space
comma := ,
comma-separate = $(subst ${space},${comma},$(strip $1))

list := a b  other     stuff  # trailing space
$(error [$(call comma-separate,${list})])