Makefile报missing separator错误,gfortran编译Fortran代码失败如何解决?
问题解决步骤
报错原因说明
你遇到的Makefile:12: *** missing separator. Stop.报错,核心原因是Make语法强制要求所有目标规则下的执行命令必须以制表符(Tab)开头,你之前的Sublime全局配置将制表符自动转为空格,导致make无法识别命令的分隔符。
你提到的^M是Windows格式换行符(CRLF)中的回车符,在类Unix系统(Linux/macOS)下会被识别为多余非法字符,也可能引发Makefile解析错误。
无需修改Sublime全局配置的解决方案
1. 配置Sublime仅对Makefile禁用Tab转空格
Sublime支持针对特定文件类型单独设置缩进规则,完全不影响你Python开发的全局配置:
- 用Sublime打开你的Makefile文件
- 点击菜单栏「偏好设置」→「设置 - 特定语法」
- 在弹出的
Makefile.sublime-settings配置文件右侧,输入以下内容后保存:
{ "tab_size": 4, "translate_tabs_to_spaces": false, "use_tab_stops": false, "default_line_ending": "unix" }
这个配置仅对.mk/Makefile类文件生效,Python文件依然会保持你原有的Tab转空格设置。
2. 修复现有Makefile的格式错误
- 删掉现有Makefile所有命令行开头的空格,按一下Tab键补全缩进(刚才的配置已经不会把Tab转为空格)
- 消除
^M换行符:点击Sublime右下角的换行符格式标识(默认可能显示为「Windows」或「CRLF」),选择「Unix」后保存文件即可。
3. 校验Makefile格式是否正确
你可以在终端执行以下命令检查格式:
cat -A Makefile
- 命令行开头显示
^I代表是正确的制表符,如果显示多个空格则需要重新修改缩进 - 行尾仅显示
$代表换行符正常,如果显示^M$说明还有Windows换行符需要处理
修正后可用的Makefile参考
F90 = gfortran FFLAGS = #-O3, this is an optimizer which makes loops more efficient EXECUTABLE = quad # Object Files for build OBJS = \ Constants.o \ functions.o \ quadratureRules.o \ $(EXECUTABLE) : $(OBJS) $(F90) $(FFLAGS) -o $(EXECUTABLE) ./QuadExample.f90 $(OBJS) # Object dependencies and compilation Constants.o : ./Constants.f90 $(F90) $(FFLAGS) -c ./Constants.f90 functions.o : ./functions.f90 \ Constants.o $(F90) $(FFLAGS) -c ./functions.f90 quadratureRules.o : ./quadratureRules.f90 \ Constants.o $(F90) $(FFLAGS) -c ./quadratureRules.f90 # Utility targets .PHONY: clean clean: rm *.o *.mod rm quad
注意:上述代码中所有命令行开头的缩进都是制表符,直接复制使用即可。
额外编译注意事项
你提供的Fortran代码中QuadExample.f90里调用的lefthandRule和函数定义的leftHandRule大小写不一致,不过Fortran编译器默认不区分标识符大小写,不影响编译,如果有严格大小写检查的编译参数可统一拼写即可。
内容的提问来源于stack exchange,提问作者Tejas Shetty
相关产品推荐
相关产品推荐

