2012-04-01 72 views
0

我想要做下面的事情。我想为Makefile创建一个可变的参数列表。变量参数列表到一个Makefile

make VAR_ARG_LIST=src1,src2,src3,src4 

我可以这样吗?如果可以,我如何从Makefile中的变量VAR_ARG_LIST中提取src1,src2或src3?

谢谢,

回答

0

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

但是,我可以回答你问的问题,并希望它是有用的。如果您使用GNU让你可以这样做:

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)) 

+0

其实我想根据变量参数列表来定义宏。例如,如果在VAR_ARG_LIST中找到“src1”,我想在makefile中定义开关#SRC1。如果不是SRC1没有定义。你的答案似乎足够接近我。让我尝试一下。如果我能够从VAR_ARG_LIST中提取逗号分隔的字符串,我可以实现它。 – user1293997 2012-04-01 18:40:44

+0

我不太清楚在makefile中定义switch#SRC1是什么意思,但是如果你只是试图查看一个单词是否存在于逗号分隔的列表中,你可以使用'$(filter src1,$(filter src1,$ subst $(COMMA),$(VAR_ARG_LIST)))'如果它存在,它将是'src1',否则是空的。 – MadScientist 2012-04-02 04:26:21

1

如果你想要的目标,在宏make一个列表中使用,使用空格分开他们(引号中

make VAR_ARG_LIST="src1 src2 src3 src4" 

这可以在里面makefile在所有使用没有太多的麻烦:

PROGRAMS = ${VAR_ARG_LIST} 

all: ${PROGRAMS} 
在命令行上它们) 210

并且它将关闭并从makefile的其余规则中创建程序src1,... src4

如果这不是大致的,那么你需要澄清你的问题。

+0

或者,如果它是一个目标列表,你可以'make src1 src2 src3 src4'。 – Idelic 2012-04-02 18:04:12