Windows下GNU Make 4.2.1执行if EXIST命令报错问题咨询
问题原因及解决办法
核心原因
GNU Make for Windows默认会调用类Unix shell(比如Git Bash自带的/usr/bin/sh)来执行Makefile中的命令,但你写的if EXIST C:\ echo hi是Windows CMD专属语法,类Unix shell完全无法解析:
if EXIST是CMD特有的条件判断语法,sh的条件判断逻辑是if [ 条件 ]; then 命令; fi这种格式- 路径里的
C:\在shell中,反斜杠\是转义字符,会被解析成单纯的C:,导致命令结构残缺,直接触发"syntax error: unexpected end of file"错误
而普通命令提示符能正常执行,是因为CMD直接解析了这条命令;Eclipse中正常运行,是因为你在Eclipse里配置了让Make使用Windows的CMD(或PowerShell)作为命令执行器,而非默认的类Unix shell。
修复方案
有两种常用解决方式:
- 强制Make使用CMD执行命令
在Makefile最开头添加以下配置,让Make调用Windows CMD来解析后续命令:
SHELL := cmd.exe .SHELLFLAGS := /c
这样你的if EXIST命令和C:\路径就能被正常识别。
- 改用类Unix shell兼容的语法
如果需要保持默认的类Unix shell,把命令修改为sh能识别的格式:
some_target: if [ -d "/c" ]; then echo hi; fi
内容的提问来源于stack exchange,提问作者Danila Berezin
相关产品推荐
相关产品推荐

