2012-04-01 33 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