首页 > 解决方案 > 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

标签: if-statementmakefile

解决方案


这回答了你的问题了吗?

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 手册,条件语法部分


推荐阅读