macOS终端使用makefile报missing separator错误求助
Makefile 报错
missing separator 修复方案 错误根因
该报错的唯一原因是你Makefile中规则下的编译命令行首使用了空格缩进,而Make语法强制要求命令行必须以TAB制表符作为起始分隔符。
跨系统差异说明
你朋友的Ubuntu环境可以正常运行、macOS不行的原因是两者默认的make工具版本不同:
- macOS自带的是BSD make,对格式校验极其严格,仅识别
TAB作为命令行的合法起始符,空格缩进会直接触发报错 - Ubuntu默认使用GNU make,对格式有更宽松的兼容策略,部分场景下少量空格缩进也可以被识别;另外也有可能你在复制文件到mac的过程中,编辑器自动将原文件里的TAB转换成了空格,导致你本地的文件和你朋友的文件实际内容不一致。
修复方法
- 打开你的Makefile,将所有编译命令行开头的空格全部替换为单个
TAB,修改后的正确内容如下:
fact:factorial2.o facth.o c++ factorial2.o facth.o -o fact facth.o:facth.cpp c++ -c facth.cpp factorial2.o:factorial2.cpp c++ -c factorial2.cpp
(注意上面代码块中每行命令开头的空白都是单个TAB)
2. 保存文件后重新执行make即可正常编译。
如果后续想让mac的make行为和Ubuntu完全对齐,可以通过Homebrew安装GNU make:执行brew install make后,使用gmake命令替代系统自带的make运行Makefile即可。
内容的提问来源于stack exchange,提问作者Key76
相关产品推荐
相关产品推荐

