我正在尝试使用GNU if
中的make
函数(而不是其中一个条件语句),以便在特定变量 isn时将单词添加到列表中't 定义。我最终这样做的方法是在提供第三个参数时将第二个参数留空,如下所示:
FOO := baz $(if $(BAR),,quux)
这看起来工作正常,但让我觉得有点傻。有没有任何简单的内置方式来做我想要的事情?我可以定义自己的not
函数,但是
FOO := baz $(if $(call not,$BAR),quux)
在我看来并没有太大改善。
答案 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)
)来执行此操作,但这比您提供的两个示例更为丑陋^ _ ^