“否定”makefile中的变量

时间:2011-03-25 15:06:58

标签: makefile

我正在尝试使用GNU if中的make函数(而不是其中一个条件语句),以便在特定变量 isn时将单词添加到列表中't 定义。我最终这样做的方法是在提供第三个参数时将第二个参数留空,如下所示:

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

这看起来工作正常,但让我觉得有点傻。有没有任何简单的内置方式来做我想要的事情?我可以定义自己的not函数,但是

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

在我看来并没有太大改善。

2 个答案:

答案 0 :(得分:3)

我会这样:

ifndef BAR
FOO +=quux
endif

或者如果空字符串具有“未定义”的含义,则:

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

答案 1 :(得分:1)

根据docs

  

第一个参数,条件,第一个   有所有前面和尾随   空白剥离,然后扩展。   如果它扩展为任何非空字符串,   那么条件被认为是   真正。如果它扩展为空   字符串,条件被认为是   是假的。

所以问题是如何使定义的变量给出一个空字符串,一个非定义的变量给出一个非空的字符串。

您可以使用filter function结合origin function$(if $(filter undefined,$(origin BAR)),quux))来执行此操作,但这比您提供的两个示例更为丑陋^ _ ^