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

如何在Makefile中正确使用if和else语句?已尝试两种方法均失效

在MinGW Makefile中正确使用条件判断的方法

一、修正Make内置条件判断(ifneq)的用法

你之前把ifneq写在了recipe的缩进块里,这是错误的——Make的内置条件语法(ifneq/ifeq等)属于Makefile顶层语法,不能放在需要Shell执行的命令缩进中。正确写法是用条件判断直接控制recipe内容:

true = 1
false = 0

test:
ifeq ($(true), $(false))
	@echo "2"
else
	@echo "1"
endif

注意:

  • ifeq/ifneq无需缩进,直接跟在目标后
  • 命令行前必须用Tab键缩进(Make对缩进格式要求严格)
  • 加@可隐藏命令本身,只显示执行结果

二、修正Shell条件判断的用法

你用了Bash风格的[[ ]]语法,但Windows下MinGW默认Shell是cmd.exe,不支持该语法,有两种解决方式:

方式1:改用cmd.exe的条件语法

适配默认cmd Shell的写法:

test:
	if "a12" == "a12" echo "12"

若要分行写,需用^作为换行符:

test:
	if "a12" == "a12" (^
		echo "12"^
	)

方式2:指定Make使用Bash作为Shell

如果想继续用Bash语法,需在Makefile开头指定Shell路径:

SHELL := /bin/bash
.SHELLFLAGS := -euo pipefail -c

test:
	if [[ "a12" = "a12" ]]; then \
		echo "12"; \
	fi

注意:

  • 多行Shell命令需用\续行,每行开头用Tab缩进
  • /bin/bash路径在Mingw64环境下通常有效,若路径不符可自行调整

额外注意事项

  • Windows下Makefile建议使用LF换行符,避免CRLF导致命令执行异常
  • recipe中所有命令行必须以Tab开头,不能用空格替代

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:40:05