makefile - 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。”
我究竟做错了什么?
解决方案
您误读了语法示例。在大多数技术手册中,字符 [ 和 ] 围绕可选内容:可以省略的部分。它们并不意味着直接插入到文本中。
另外你需要有两件事来比较,这里你只有一个($(and ...)
功能)。
另外我不知道您为什么要在末尾添加句号。也许这在您的真实版本中不存在。
你应该这样写:
ifneq (,$(and $(MATCH1),$(MATCH2),$(MATCH3)))
请注意开头的逗号:您将空字符串与$(and ..)
函数的结果进行比较(如果任何$(MATCHx)
变量为空,则该结果将为空。
推荐阅读
- android - 如何使用 Applocalization 翻译 List 中的文本?
- swift - 将保存在 plist 文件中的数据传递给 swiftUI 中的小部件
- mysql - ERROR 3780: Referencing column and referenced column in foreign key constraint are incompatible
- wordpress - Elementor Wodpress - Header widget paragraph spacing issues
- forms - Able to see post request data in network tab
- node.js - Adding webpages to a deployed webserver(nodejs)?
- c# - GroupBy in cshtml
- sql - 构建此更新语句的逻辑让我感到困惑
- gpgpu - 计算着色器最佳实践/现代风格示例
- flutter - 错误:编译flutter应用程序时-source 7不支持lambda表达式