我遇到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)
对任何人都有明显的意义吗?
答案 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
的绝对路径从