首页 > 解决方案 > ifeq 条件和 Makefile

问题描述

尝试对 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: *** invalid syntax in conditional。”

我究竟做错了什么?

标签: makefileconditional

解决方案


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

另外你需要有两件事来比较,这里你只有一个($(and ...)功能)。

另外我不知道您为什么要在末尾添加句号。也许这在您的真实版本中不存在。

你应该这样写:

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

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


推荐阅读