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

Windows下MinGW运行Makefile报错:obj/main.o目标规则执行失败

解决Windows下MinGW执行Makefile时mkdir语法错误的问题

问题原因

你遇到的mkdir -p ./obj/语法错误,本质是Windows原生mkdir不支持Unix风格的-p参数。即使安装了MinGW,如果mingw32-make默认调用Windows系统的cmd.exe作为shell,执行的是Windows自带的mkdir命令,而非GNU工具链里的mkdir,就会触发这个错误。

解决方案

方法1:改用Windows兼容的目录创建命令

把Makefile里的mkdir -p $(OBJ_PATH)替换为Windows cmd支持的写法:

$(OBJ_PATH)%.o: %.c
	if not exist $(OBJ_PATH) mkdir $(OBJ_PATH)
	$(CC) $(CF) $(CFI) -c $< -o $@

如果需要递归创建多级目录(比如obj/subdir/),Windows原生mkdir不支持递归,可改用PowerShell命令替代:

$(OBJ_PATH)%.o: %.c
	powershell -Command "New-Item -ItemType Directory -Force -Path $(OBJ_PATH)"
	$(CC) $(CF) $(CFI) -c $< -o $@

方法2:强制使用MinGW的GNU Shell

在Makefile最顶部添加一行,指定使用MinGW自带的bash作为执行shell,这样就能正常识别Unix风格的命令参数:

# 放在Makefile最顶部,根据你的MinGW安装路径调整
SHELL := C:/MinGW/bin/bash.exe
# 若MinGW/bin已在系统PATH中,也可简化为:
# SHELL := /bin/bash

# 原规则保持不变
$(OBJ_PATH)%.o: %.c
	mkdir -p $(OBJ_PATH)
	$(CC) $(CF) $(CFI) -c $< -o $@

方法3:调整PATH优先级确保GNU工具优先

检查系统PATH环境变量,将MinGW的bin目录(比如C:\MinGW\bin)移到最前端,这样mingw32-make会优先调用GNU版本的mkdir,而非Windows自带命令。

额外注意事项

你的Makefile里还有两个Windows环境下无法正常工作的目标:

  • install目标中的sudo apt-get是Linux系统的包管理命令,Windows下无法执行。若需安装readline库,需手动下载MinGW适配版本并配置路径。
  • leak目标中的valgrind是Linux专属的内存泄漏检测工具,Windows无原生支持版本,可改用Visual Studio内存检测工具或其他Windows兼容方案替代。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:30:45