2010-01-27 54 views
3

我有一个GNU Makefile文件,看起来有点像这样:有条件追加到一个Makefile中的变量目标

LIST = item1 

.PHONY: targetMain targetA targetB preA preB 

targetMain: 
# DO all the work in here 
    echo $(LIST) 

targetA: preA targetMain 
targetB: preB targetMain 

preA: 
LIST += itemA 

preB: 
LIST += itemB 

的想法是,我要么运行make targetA或使targetB。他们两人都做了非常类似的事情,但有不同的项目列表。问题在于变量没有被有条件地附加到,它总是被附加到,意味着我的输出始终是“item1 itemA itemB”。

如何有条件地追加到变量?

回答

7
LIST = item1 

.PHONY: targetMain targetA targetB 

targetMain: 
# DO all the work in here 
    echo $(LIST) 

targetA: LIST+=itemA 
targetB: LIST+=itemB 

targetA targetB: targetMain 
+4

有点解释:这叫做目标特定变量。它的工作方式是现在有两个* LIST变量:一个用于targetA,另一个用于targetB。 'target:VARIABLE = value'语法是如何分配特定于目标的变量。这两个'LIST'变量中的哪一个被展开取决于你所在的目标命令脚本。注意,由于这个原因,目标特定的变量只能从命令脚本中被引用(它们不能被引用prerequesites线,甚至)。 – 2010-01-27 18:18:35

+0

太棒了,这似乎是做我想要的! – bramp 2010-01-27 18:19:46

+0

谢谢,丹,我应该补充一些解释。 :-) – Neil 2010-01-27 18:59:05