You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Make构建工具的条件判断语句是否支持elif多分支语法?

先澄清语法混淆问题

你给出的示例写法本身混淆了GNU Make原生条件语法和Shell条件语法:

  • GNU Make原生的ifeq是Make解析阶段执行的逻辑,不需要加; then后缀,也不依赖Shell运行
  • 带; then的是Shell层的条件语法,Shell根本不识别ifeq关键字,你的示例写法不管有没有elif都无法正常运行

关于elifeq的疑问

GNU Make官方从来没有提供elifeq/elif这类关键字,你写的第二段代码完全不符合语法规范,运行会直接报错。


多分支条件实现方案

方案1:使用Make原生条件(解析阶段执行,性能更好)

可以用else ifeq的连续写法实现多分支,不需要深层嵌套:

# 定义变量
var = yes

# Make层多分支判断
ifeq ($(var),yes)
    output = yes
else ifeq ($(var),no)
    output = no
else
    output = invalid
endif

all:
	@echo $(output)

方案2:在配方中使用Shell原生条件(运行阶段执行,适合和命令绑定的判断)

直接用标准Shell的if elif语法即可,注意行末加反斜杠续行,保证所有判断逻辑在同一个Shell进程中执行:

var = yes

all:
	@if [ "$(var)" = "yes" ]; then \
		echo "yes"; \
	elif [ "$(var)" = "no" ]; then \
		echo "no"; \
	else \
		echo "invalid"; \
	fi

不需要用嵌套或者额外的test命令,上面两种方案都可以满足多分支判断的需求。


内容的提问来源于stack exchange,提问作者TheEagle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 02:45:03