if-statement - makefile 中的嵌套条件
问题描述
这里的生成文件有嵌套的 if 语句来分配变量值和要构建的目标。当前的嵌套结构并不是真正的嵌套——它是一系列 if 语句:没有使用 else。
这是因为 makefile 没有 elseIf 的等价物吗?
当前结构(为这篇文章的可读性添加了缩进)
If condition x
if condition x.x
blah
endif
if condition x.y
blah blah
endif
endif
if condition y
if condition y.x
blah
endif
if condition y.y
blah blah
endif
endif
所需结构的伪代码版本:
If condition x
if condition x.x
blah
else
if condition x.y
blah blah
endif
else
if condition y
if condition y.x
blah
else
if condition y.y
blah blah
endif
endif
解决方案
这回答了你的问题了吗?
ifeq ($(VAR1),x)
ifeq ($(VAR2),x)
$(info x.x)
else ifeq ($(VAR2),y)
$(info x.y)
endif
else ifeq ($(VAR1),y)
ifeq ($(VAR2),x)
$(info y.x)
else ifeq ($(VAR2),y)
$(info y.y)
endif
endif
all:;
演示:
$ make VAR1=x VAR2=y
x.y
make: 'all' is up to date.
但您也可以:
ifeq ($(VAR1).$(VAR2),x.x)
$(info x.x)
else ifeq ($(VAR1).$(VAR2),x.y)
$(info x.y)
else ifeq ($(VAR1).$(VAR2),y.x)
$(info y.x)
else ifeq ($(VAR1).$(VAR2),y.y)
$(info y.y)
endif
all:;
演示:
$ make VAR1=y VAR2=x
y.x
make: 'all' is up to date.
有关更多信息,最好的来源是GNU make 手册,条件语法部分。
推荐阅读
- c# - C# 在 Windows Server 2008 R2 上使用 System.Web.Mail 发送认证邮件时出错
- sql - Complex SQL involving LOOP and QUERY
- ssis - 何时将错误写入 SSISDB?
- apache-spark - 如何在 Apache Airflow 的 SparkSubmitOperator 中将文件作为参数传递
- firebase - 具有 Firebase 身份验证的 AWS AppSync
- javascript - 如何遍历 ES6 中的对象数组
- python - 如何使用装饰器将函数绑定到对象实例?
- python - 无法运行 python 文件 - 可能是因为它没有扩展名?
- android - 调用其他活动方法时显示 NullPointerException
- mongodb - mongodb有模式吗