主题:求教关于带Makefile文件的fortran程序包在windows中用cvf6.6编译的问题。
mlandy12
[专家分:0] 发布于 2010-09-12 11:30:00
[size=4]初学fortran,最近在看别人的代码程序包,一共6个文件(见附件),其中MT2DModules.f90和OccamModules.f90为模块文件,被其它两个程序调用。子程序MT2D.f90含有大量子例程和函数,被Occam.f90调用。主程序Occam.f90含有一定量的子例程。还有一个Makefile文件无扩展名,一个.DS_Store文件(我推测应该没什么用)。
我先建了一个工程,然后加入已有的四个f90文件,并按以下顺序编译MT2DModules.f90、OccamModules.f90、MT2D.f90、Occam.f90,结果前两个无错,第三个有两个错误,第四个有两个警告(见word),请高人帮忙看一下是什么问题,是不是跟那个Makefile文件有关?还是其它什么原因?[/size]
回复列表 (共3个回复)
沙发
dongyuanxun [专家分:7180] 发布于 2010-09-12 13:20:00
有.DS_Store,可能是原作者在Mac OS下生成的
makefile里已经写明编译顺序为OccamModules.f90 MT2DModules.f90 Occam.f90 MT2D.f90,
所以要把前两个OccamModules.f90 MT2DModules.f90先编译成.mod
后两个再编译成.o或.obj
然后把.o 和 .mod进行链接输出可执行程序或库
对于cvf,生成了.mod就可以直接使用use了
如何用cvf只编译不链接,请参见cvf命令行的使用
板凳
ronei [专家分:360] 发布于 2010-09-12 18:22:00
我测试了下,makefile可用,编译没问题。说明四个文件都没问题,你还是检查下你的项目设置吧。
这是windows下,ifort,makefile文件
FC90 = ifort
FCFLAGS= -O2
rm = DEL
TARGETS= clean Occam2D
OBJSOC= OccamModules.f90 MT2DModules.f90 Occam.f90 MT2D.f90
all: $(TARGETS)
clean:
$(rm) *.o *~ core *.mod
$(rm) Occam2D
Occam2D:$(OBJSOC)
$(FC90) $(FCFLAGS) -o $@ $(OBJSOC) $(LIBS)
# General compile rules
.SUFFIXES: .f90 .o
.f90.o:
$(FC90) $(FCFLAGS) -c -o $@ $<
3 楼
aliouying [专家分:1150] 发布于 2010-09-14 21:44:00
晕,MT2D OCCAM反演
这个我编译过,没问题
我来回复