Makefile:12: *** 缺少分隔符。停止。 gfortran

Makefile:12: *** missing separator. Stop. gfortran

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 Andrew R. Winters notes 中列出的 Fortran 代码。我在这里列出版本以防这些注释从网络上消失。

但是当运行 make 构建这些文件时,我得到了以下错误

Makefile:12: *** missing separator. Stop.

在看到其他 make 文件问题后,我觉得问题是由于 Sublime Text 将我的制表符转换为空格,正如我最初设置的那样。 (对于 python)。我不想打扰它。

我尝试了 to detect where the tabs were supposed to be,但它给出了不同的结果 就像我无法弄清楚 ^M 是什么意思。

然后我尝试 .editorconfig file approach 告诉 Sublime Text 不要自动修复标签。也无济于事。

我也试过一个说使用 u09 Unicode 字符的答案,我现在找不到了。

我正在复制文件 Constants.f90 functions.f90 QuadExample.f90 quadratureRules.f90 下面是更好的主意

常量.f90

MODULE Constants
    IMPLICIT NONE
    INTEGER ,PARAMETER          :: RP = SELECTED_REAL_KIND(15)
    REAL(KIND=RP),PARAMETER     :: pi = 4.0_RP*ATAN(1.0_RP)
END MODULE Constants

functions.f90

FUNCTION f(x)
IMPLICIT NONE
INTEGER,PARAMETER           :: RP = SELECTED_REAL_KIND(15)
REAL(KIND=RP),INTENT(IN)    :: x
REAL(KIND=RP)               :: f
!
f = EXP(x) - x**2 ! Alternatively could use x*x, faster than the "power" command
!
END FUNCTION f
!
FUNCTION g(x)
IMPLICIT NONE
INTEGER,PARAMETER           :: RP = SELECTED_REAL_KIND(15)
REAL(KIND=RP),INTENT(IN)    :: x
REAL(KIND=RP)               :: g
!
g = SIN(x) - COS(x)
!
END FUNCTION g

QuadExample.f90

PROGRAM Quadrature
    IMPLICIT NONE
    INTEGER ,PARAMETER          :: RP = SELECTED_REAL_KIND(15)
    INTEGER ,PARAMETER          :: N = 150
    REAL(KIND=RP),PARAMETER     :: a = -1.0_RP, b = 2.0_RP
    REAL(KIND=RP)               :: Integral
    REAL(KIND=RP),EXTERNAL      :: leftHandRule,f,g
!
    WRITE(*,*)
    Integral = lefthandRule(a,b,N,f)
    WRITE(*,*) 'Approximation for f(x) integral: ',Integral
    WRITE(*,*)
    Integral = leftHandRule(a,b,N,g)
    WRITE(*,*)'Approximation for g(x) integral: ',Integral
!
END PROGRAM Quadrature

quadratureRules.f90

FUNCTION leftHandRule(a,b,N,func)
    IMPLICIT NONE
    INTEGER ,PARAMETER          :: RP = SELECTED_REAL_KIND(15)
    INTEGER ,INTENT(IN)         :: N
    REAL(KIND=RP),INTENT(IN)    :: a,b
    REAL(KIND=RP),EXTERNAL      :: func
    REAL(KIND=RP)               :: leftHandRule
! Local Variables
    INTEGER                     :: i
    REAL(KIND=RP)               :: dx,x
!
    dx = (b-a)/N
    leftHandRule = 0.0_RP
    DO i = 0,N-1
    x = a + i*dx
    leftHandRule = leftHandRule + func(x)*dx
    END DO! i
!
END FUNCTION leftHandRule

灵感来自 an answer relating to gedit

我打开了 Sublime Text > 首选项 > 设置 并将“Makefile”添加到 "file_exclude_patterns":

在那之后,我用gedit打开它,实际上将空格转换为制表符。 瞧,事情成功了。