ifeq有条件且在Makefile中

时间:2019-04-29 22:16:46

标签: makefile conditional

试图在Makefile上进行条件编译。如果满足所有三个条件(又名匹配),则继续编译某些子目录,否则执行其他操作。

MATCH1 := $(if $(strip $(VAR1)),$(patsubst 6000,,$(VAR1)),NO)
MATCH2 := $(if $(strip $(VAR2)),$(patsubst cp,,$(VAR2)),NO)
MATCH3 := $(if $(strip $(VAR3)),$(patsubst 100g,,$(VAR3)),NO)

ifneq ($(and $(MATCH1)[,$(MATCH2)[,$(MATCH3)]])).   <<< error here
do-something
else 
do-something-else
endif

代码在上面提到的行中给我错误 “ Makefile:26:***条件语法无效。”

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

您误读了语法示例。在大多数技术手册中,字符[和]围绕可选内容:可以省略的部分。它们并不是要直接插入文本中。

您还需要比较两件事,在这里您只有一件事($(and ...)函数)。

我也不知道您为什么要在最后加上句号。也许您的真实版本不存在。

您应该这样写:

ifneq (,$(and $(MATCH1),$(MATCH2),$(MATCH3)))

在开头请注意逗号:您正在将空字符串与$(and ..)函数的结果进行比较(如果任何$(MATCHx)变量为空,则该字符串为空。