2011-03-25 51 views
2

我试图在GNU make中使用if函数(而不是其中一个条件语句),以便在列表中添加一个单词,如果特定变量不是定义了。我已经结束了这样做的办法是离开的第二个参数的空白,同时提供了第三个参数,就像这样:“否定”makefile中的变量

FOO := baz $(if $(BAR),,quux) 

认为这工作不错,但在我看来是有点傻。有没有什么简单的内置方式可以做我想做的事?我可以定义我自己的not功能,但是

FOO := baz $(if $(call not,$BAR),quux) 

对我的意见没有太大的改进。

+2

停止发现它傻了两个例子甚至丑陋? – reinierpost 2011-03-25 16:34:51

回答

3

我会走这条路:

ifndef BAR 
FOO +=quux 
endif 

,或者空字符串的意思是 “没有定义”,然后:

ifeq ($(BAR),) 
FOO +=quux 
endif 
1

按照docs

第一参数,条件,第一个 具有全部前后 whitespace str ipped,然后扩大。 如果它扩展为任何非空字符串,则 则认为条件为 为真。如果它扩展为空的 字符串,则认为该条件为 为假。

所以问题是你将如何让一个定义变量给一个空字符串和一个非定义变量给一个非空字符串。

例如,你可以使用filter functionorigin function$(if $(filter undefined,$(origin BAR)),quux))相结合做到这一点,但是这不是你提供^ _^