Linux “生成文件错误”/usr/bin/f77:非法选项:-autodouble;

Linux “生成文件错误”/usr/bin/f77:非法选项:-autodouble;,linux,makefile,fortran,Linux,Makefile,Fortran,我编写了一个make文件,如下所示: COMPFLAGS = -O3 -autodouble CFLAGS = $(COMPFLAGS) PFLAGS = $(COMPFLAGS) FFLAGS = $(COMPFLAGS) CCFLAGS = $(COMPFLAGS) CXXFLAGS = $(COMPFLAGS) LD = ifort LDFLAGS = $(COMPFLAGS) MAKEF

我编写了一个make文件,如下所示:

COMPFLAGS     = -O3 -autodouble  

CFLAGS        = $(COMPFLAGS)
PFLAGS        = $(COMPFLAGS)
FFLAGS        = $(COMPFLAGS)
CCFLAGS       = $(COMPFLAGS)
CXXFLAGS      = $(COMPFLAGS)

LD  =   ifort

LDFLAGS       = $(COMPFLAGS)

MAKEFILE      = Makefile

OBJS          = f1.o \
        f2.o \
        f3.o \

PROGRAM       = f1

all:        $(PROGRAM)

%.o:    %.f90
     @$(LD) $(COMPFLAGS) -c $<

$(PROGRAM):     $(OBJS)  $(MAKEFILE)

        @$(LD) $(LDFLAGS) $(OBJS)  -o $(PROGRAM)
        @echo "done"

clean:
        @rm -f $(OBJS) core
我应该注意到没有
*.f
文件,所有文件都是
*.f90

你能告诉我哪里出错了吗

非常感谢。

这看起来很不寻常:

LD  =   ifort
...

%.o:    %.f90
     @$(LD) $(COMPFLAGS) -c $<
您可能还需要
-x
选项来告诉机器是Fortran 90,而不是要预处理的东西:

%.o: %.f90
     @$(CC) -x f90 -std=f90 $(COMPFLAGS) -c $<
%.o:%.f90
@$(CC)-x f90-std=f90$(COMPFLAGS)-c$<
这看起来很不寻常:

LD  =   ifort
...

%.o:    %.f90
     @$(LD) $(COMPFLAGS) -c $<
您可能还需要
-x
选项来告诉机器是Fortran 90,而不是要预处理的东西:

%.o: %.f90
     @$(CC) -x f90 -std=f90 $(COMPFLAGS) -c $<
%.o:%.f90
@$(CC)-x f90-std=f90$(COMPFLAGS)-c$<

make
由于某些原因与您不一致。试着运行
make-n-d
(打印诊断信息-很多诊断信息-而不是实际执行命令)。查找一段时间后,您可能会在输出中找到信息。另请参见、、等。您正在调用gcc的
f77
编译器,而不是ifort
-autodouble
ifort
make
因某种原因与您不一致有效。试着运行
make-n-d
(打印诊断信息-很多诊断信息-而不是实际执行命令)。查找一段时间后,您可能会在输出中找到信息。另请参见、、等。您正在调用gcc的
f77
编译器,而不是ifort
-autodouble
ifort
有效,尽管我并不反对
LD
是错误的变量名,尽管
CC
是C编译器,所以它只是稍微好一点(为什么不使用类似
F90
?),但进行这些更改无法修复问题中描述的问题。Make根本不关心您使用的变量名。以防未来的人们看到这个问题和答案…@madscitist-可能是添加了
-std=f90
;或
-xf90-std=f90
。我不是Fortran的人,所以我当然不知道其中的微妙之处。但是我仍然编写自己的Maxfile,使用C++的各种版本,所以我认为附加的选项可能会产生不同。在你的问题中的例子表明,试图从<代码> .f>代码>文件中创建<代码> .o>代码>文件,但是您说您的目录中没有
.f
文件,并且您的源文件都命名为
.f90
。这些变量设置,或在任何变量赋值中创建的任何选项,都不会对算法产生任何影响。算法用于定位要编译的文件。@Madscitist-哦,你说得对。我没有注意到文件扩展名断开连接。也许他将它们直接添加到
COMPFLAGS
,然后再添加到其他标志,如
CFLAGS
cxflags
。哎呀,对不起,jww,我以为SFAF正在响应。。。星期一!尽管我并不反对
LD
是错误的变量名,尽管
CC
是C编译器,所以它只是稍微好一点(为什么不使用类似
F90
?),但进行这些更改无法修复问题中描述的问题。Make根本不关心您使用的变量名。以防未来的人们看到这个问题和答案…@madscitist-可能是添加了
-std=f90
;或
-xf90-std=f90
。我不是Fortran的人,所以我当然不知道其中的微妙之处。但是我仍然编写自己的Maxfile,使用C++的各种版本,所以我认为附加的选项可能会产生不同。在你的问题中的例子表明,试图从<代码> .f>代码>文件中创建<代码> .o>代码>文件,但是您说您的目录中没有
.f
文件,并且您的源文件都命名为
.f90
。这些变量设置,或在任何变量赋值中创建的任何选项,都不会对算法产生任何影响。算法用于定位要编译的文件。@Madscitist-哦,你说得对。我没有注意到文件扩展名断开连接。也许他将它们直接添加到
COMPFLAGS
,然后再添加到其他标志,如
CFLAGS
cxflags
。哎呀,对不起,jww,我以为SFAF正在响应。。。星期一!