ifeq 有条件的和在 Makefile 中

ifeq conditional and in 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. "

我做错了什么?

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

另外你需要有两个东西来比较,这里你只有一个($(and ...)函数)。

我也不知道你为什么要在最后加一个句点。也许你的真实版本中没有。

你应该这样写:

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

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