gfortran makefile'无法打开包含文件'

时间:2016-08-08 22:21:12

标签: makefile fortran gfortran

我遇到makefile编译的问题,我不知道从哪里开始诊断。它是为同事的OS X系统生成的,我正在尝试在我的linux系统上实现它。它适用于OS X计算机。我已更新库位置以表示它们在我的计算机上的位置 - 这可能是错误的最大来源,因为gfortran程序不应该不同,不是吗?

包含的文件:file0.i,... fileN.i都与makefile位于同一目录中。

我确定我是否可以编译第一个目标文件,我可以完成剩下的工作并完成我的博士学位或保存世界或其他东西。

该文件的片段如下:

#  %W%  %G%
#  Makefile for directory ~/Documents/workstuff/project/program         
#
fflags = -O3 -I. -I/usr/local/include -frecord-marker=4 -ffree-form
##     -fdefault-real-8 -fdefault-double-8
lflags = -L/usr/local/lib -lnetcdf -lnetcdff
#  for debugging, use these options
fflags = -g
lflags = -g
chem = ~/Documents/workstuff/project/chem      


main.o: $(chem)/code/main.f file0.i file1.i file2.i
    gfortran -c $(fflags) $(chem)/code/main.f

我收到以下错误:

~/Documents/workstuff/project/program/chem/code/main.f:11: Error: Can't open included file 'file0.i'
makefile:14: recipe for target 'main.o' failed
make: *** [main.o] Error 1

我认为这可能是一个可执行问题,所以我们从644到744:

username$ file file0.i
file0.i: ASCII text


username$ stat -c '%A %a %n' file0.i
-rwxr--r-- 744 file0.i

仍然是同样的错误。仔细检查我的旗帜是否指向正确的位置:

username$ nf-config --fflags
-I/usr/local/include
username$ nf-config --flibs
-L/usr/local/lib -lnetcdff -lnetcdf -lnetcdf

为了它的价值,file0.i包含以下内容,我当然填写了无意义的数字在线共享:

 $Id: file0.i,v 1.12 2012/12/31 04:25:23 username Exp $
  PARAMETER (NLT=19,NHT=51,DZETA=0.5/3.,Psurf=100.)
  PARAMETER (NLT1=NLT+1,NHT1=NHT+2,NLT2=3*NLT+1,NHT2=4*NHT+1)
  PARAMETER (NDYEAR=33,NTN=75,NTCV=14,NLV=21,NPOL=8,NGSP=3)
  PARAMETER (NDIST=111,TD1=110.,NVC=1,NVSP=1,NVTIME=3)

对任何人都有明显的意义吗?

1 个答案:

答案 0 :(得分:0)

我不太了解gfortran,所以我可能完全错了,但对于gcc,如果C源文件包含:

#include <foo.h>

如果使用gcc调用-I.,则会在与源文件相同的目录中搜索foo.h,而不是在您调用gcc的目录中搜索$ ls foo bar.c bar.h $ cat foo/bar.c #include <bar.h> int main(int argc, char **argv) { return 0; } $ gcc -I. foo/bar.c foo/bar.c:1:10: error: 'bar.h' file not found with <angled> include; use "quotes" instead #include <bar.h> ^~~~~~~ "bar.h" 1 error generated. $ gcc -Ifoo foo/bar.c $ 。例如:

-I<path>

因此,您可能应该将头文件放在与源文件相同的目录中,或使用<path>,其中gfortran是您调用return的绝对路径从