2012-01-13 12 views
13

Attualmente compilare i programmi basati su moduli (come programma principale foo che dipende dal modulo bar) come segue:specificare la directory in cui gfortran dovrebbe cercare moduli

gfortran -c bar.f90 
gfortran -o foo.exe foo.f90 bar.o 

Questo funziona bene quando foo.f90 e bar.f90 sono in stessa directory. Come posso specificare una directory in cui gfortran dovrebbe cercare bar.o quando chiamo use bar in foo.f90? (cioè non voglio specificare che il compilatore debba collegare in particolare lo bar.o, voglio solo trovarlo.)

+0

hai provato gfortran -I/percorso/verso/il/obj/file? –

risposta

19

È possibile indicare a gfortran dove si trovano i file del modulo (file .mod) con il flag del compilatore -I. Inoltre, è possibile indicare al compilatore dove inserire i moduli compilati con il flag del compilatore -J. Vedere la sezione "Opzioni per la ricerca nella directory" nello gfortran man page.

Io li uso per posizionare sia il mio oggetto (.o file) che i miei file di modulo nella stessa directory, ma in una directory diversa da tutti i miei file sorgente, quindi non ingombrare la mia directory sorgente. Ad esempio,

SRC = /path/to/project/src 
OBJ = /path/to/project/obj 
BIN = /path/to/project/bin 

gfortran -J$(OBJ) -c $(SRC)/bar.f90 -o $(OBJ)/bar.o 
gfortran -I$(OBJ) -c $(SRC)/foo.f90 -o $(OBJ)/foo.o 
gfortran -o $(BIN)/foo.exe $(OBJ)/foo.o $(OBJ)/bar.o 

Mentre l'aspetto di cui sopra come un sacco di fatica di digitare sulla riga di comando, io in genere utilizzare questa idea nei miei makefile.

Solo per riferimento, le equivalenti flag del compilatore fortran Intel sono -I e -module. In sostanza ifort sostituisce l'opzione -J con -module. Si noti che c'è uno spazio dopo il modulo, ma non dopo J.

7

Quando si compila un codice sorgente Fortran che contiene moduli, un .mod (in genere il nome del file è uguale al nome del modulo) il file viene creato insieme al file oggetto. Il file .mod dovrebbe essere nella stessa directory del file di origine che utilizza quel modulo, o dovrebbe essere indicato al momento della compilazione usando bandiera -I:

gfortran -c bar.f90 
gfortran -c foo.f90 -I$PATH_TO_MOD_FILE 
gfortran -o foo.exe foo.o bar.o 

Nota che .MOD deve esistere al tempo di compilazione foo.f90.

Problemi correlati