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)
变量为空,则结果为空。
正在尝试对 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)
变量为空,则结果为空。