将变量参数列表添加到Makefile

将变量参数列表添加到Makefile,makefile,gnu-make,Makefile,Gnu Make,我想做一些如下的事情。我想要一个Makefile的变量参数列表 make VAR_ARG_LIST=src1,src2,src3,src4 我可以这样做吗?如果可以,如何从Makefile中的变量VAR_ARG_列表中提取src1、src2或src3 谢谢,您确实没有为解决方案提供足够的信息。为什么要提取这些值?你想用它们做什么 不过,我可以回答你提出的问题,希望它有用。如果您正在使用GNU make,则可以执行以下操作: COMMA := , VAR_ARG_LIST_A := $(subs

我想做一些如下的事情。我想要一个Makefile的变量参数列表

make VAR_ARG_LIST=src1,src2,src3,src4
我可以这样做吗?如果可以,如何从Makefile中的变量VAR_ARG_列表中提取src1、src2或src3


谢谢,

您确实没有为解决方案提供足够的信息。为什么要提取这些值?你想用它们做什么

不过,我可以回答你提出的问题,希望它有用。如果您正在使用GNU make,则可以执行以下操作:

COMMA := ,
VAR_ARG_LIST_A := $(subst $(COMMA), ,$(VAR_ARG_LIST))
VAR_ARG_LIST_1 := $(word 1,$(VAR_ARG_LIST_A))
VAR_ARG_LIST_2 := $(word 2,$(VAR_ARG_LIST_A))

等等。

如果您希望宏中的目标列表供
make
使用,请在命令行中使用空格分隔它们(并用引号括起来):

make VAR_ARG_LIST="src1 src2 src3 src4"
这可以在
makefile
中使用,无需太多麻烦:

PROGRAMS = ${VAR_ARG_LIST}

all:  ${PROGRAMS}
它将启动并创建程序
src1
src4
来自
makefile
中的其余规则


如果这不是您想要的,那么您需要澄清您的问题。

实际上,我想根据变量参数列表定义宏。例如,如果在VAR#u ARG#u列表中找到“src1”,我想在makefile中定义开关#src1。如果不是,则未定义SRC1。你的回答对我来说似乎很接近。让我试试。如果我能够从VAR#u ARG_列表中提取逗号分隔的字符串,我就可以实现它。我不太知道
在makefile
中定义开关#SRC1意味着什么,但是如果你只是想看看逗号分隔列表中是否存在一个单词,你可以使用
$(filter SRC1,$(subst$(comma),$(VAR#ARG LIST)))
如果存在则为
src1
,如果不存在则为空。或者,如果是目标列表,则可以
使src1 src2 src3 src4