gfortran makefile 'can't open included file'

扶醉桌前 提交于 2019-12-12 04:24:17

问题


I'm having an issue with a makefile compiling and I'm not sure where to start diagnosing this. It was generated for a colleague's OS X system, and I'm trying to implement it on my linux system. It worked on the OS X computer. I've updated library locations to represent where they live on my computer - and this is likely the biggest source of error, as gfortran procedure shouldn't be different, no?

The included files: file0.i, ... fileN.i all live in the same directory as the makefile.

I'm certain if I could compile the first object file I could get through the rest and complete my PhD or save the world or something.

A snippet of the file follows:

#  %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

And I receive the following error:

~/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

I thought it might be an executable issue, so we went from 644 to 744:

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


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

Still same error. Double-check that my flags are pointing to the right place:

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

For what its worth, file0.i contains the following, which I have of course filled with nonsense numbers for sharing online:

 $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)

Does anything obvious stick out to anyone?


回答1:


I do not know gfortran very well, so I may be completely wrong, but for gcc, if a C source file contains:

#include <foo.h>

and if gcc is called with -I., foo.h will be searched in the same directory as the source file, not in the directory where you call gcc from. Example:

$ 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
$

So, it could be that you should put your header files in the same directory as your source file or use a -I<path> where <path> is the absolute path of where you call gfortran from.



来源:https://stackoverflow.com/questions/38839371/gfortran-makefile-cant-open-included-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!