2016-08-08 5 views
0

Ich habe ein Problem mit einer Makefile-Kompilierung und ich bin mir nicht sicher, wo ich anfangen soll, dies zu diagnostizieren. Es wurde für das OS X-System eines Kollegen erstellt, und ich versuche, es auf meinem Linux-System zu implementieren. Es funktionierte auf dem OS X Computer. Ich habe Bibliotheksstandorte aktualisiert, um darzustellen, wo sie auf meinem Computer leben - und dies ist wahrscheinlich die größte Fehlerquelle, da das gfortran-Verfahren nicht anders sein sollte, nein?gfortran makefile 'kann die enthaltene Datei nicht öffnen'

Die enthaltenen Dateien: file0.i, ... fileN.i befinden sich alle im selben Verzeichnis wie das Makefile.

Ich bin sicher, wenn ich die erste Objektdatei kompilieren könnte, könnte ich durch den Rest kommen und meine Doktorarbeit abschließen oder die Welt oder etwas retten.

Ein Ausschnitt aus der Datei folgt:

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

Und ich die folgende Fehlermeldung:

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

ich dachte, es könnte ein ausführbares Problem sein, und so gingen wir 644-744:

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


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

Immer noch gleichen Fehler. Doppelklicken Sie sicher, dass meine Fahnen an die richtige Stelle verweisen:

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

Für das, was ihren Wert, file0.i folgendes enthält, die ich natürlich mit Nonsense-Nummern für die gemeinsame Nutzung online ausgefüllt haben:

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

Kann irgendjemand etwas erkennen?

+0

Was ist der Befehl, der diesen Fehler auslöst? Wo lebt 'file0.i' in Bezug auf die' main.f' Datei, die darüber klagt? –

Antwort

0

Ich weiß nicht, gfortran sehr gut, so dass ich kann völlig falsch sein, aber für gcc, wenn eine C-Quelldatei enthält:

#include <foo.h> 

und wenn gcc mit -I. aufgerufen wird, wird foo.h in gesucht das gleiche Verzeichnis wie die Quelldatei, nicht in dem Verzeichnis, in dem Sie gcc von aufrufen. Beispiel:

$ 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 könnte es sein, dass Sie Ihre Header-Dateien im selben Verzeichnis wie die Quelldatei setzen sollen oder ein -I<path> verwenden, wo <path> ist der absolute Pfad, wo Sie anrufen gfortran aus.

Verwandte Themen