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

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开发的全局配置:

  1. 用Sublime打开你的Makefile文件
  2. 点击菜单栏「偏好设置」→「设置 - 特定语法」
  3. 在弹出的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的格式错误

  1. 删掉现有Makefile所有命令行开头的空格,按一下Tab键补全缩进(刚才的配置已经不会把Tab转为空格)
  2. 消除^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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:24:08