2012-01-13 13 views
13

actualmente compilar programas basados ​​en módulos (como el programa principal foo que depende del módulo de bar) de la siguiente manera:especificar el directorio donde gfortran debe buscar módulos

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

Esto funciona bien cuando foo.f90 y bar.f90 están en el mismo directorio ¿Cómo especifico un directorio donde gfortran debe buscar bar.o cuando llamo al use bar en foo.f90? (Es decir, no quiero especificar que el compilador debe vincular bar.o específicamente, sólo quiero que se vaya encontrarlo.)

+0

¿Intentó gfortran -I/ruta/a/el/obj/archivo? –

Respuesta

19

Puede indicar a gfortran dónde se encuentran sus archivos de módulo (archivos .mod) con el indicador de compilador -I. Además, puede decirle al compilador dónde colocar los módulos compilados con el indicador del compilador -J. Consulte la sección "Opciones para la búsqueda de directorio" en el gfortran man page.

Los utilizo para ubicar mis objetos (archivos .o) y mis archivos de módulo en el mismo directorio, pero en un directorio diferente para todos mis archivos fuente, para no saturar mi directorio fuente. Por ejemplo,

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 

Mientras las miradas por encima de como mucho esfuerzo en escribir en la línea de comandos, por lo general utiliza esta idea en mis archivos make.

Solo como referencia, los indicadores del compilador Fortran equivalentes de Intel son -I y -module. Esencialmente ifort reemplaza la opción -J con -module. Tenga en cuenta que hay un espacio después del módulo, pero no después de J.

7

Al compilar un código fuente Fortran que contiene módulos, un Mod (por lo general el nombre de la el archivo es el mismo que el nombre del módulo) se crea junto con el archivo del objeto. El archivo Mod debe estar en el mismo directorio que el archivo fuente que está utilizando ese módulo, o cabe señalar que en tiempo de compilación usando la bandera -I:

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

Tenga en cuenta que .mod debe existir en el foo.f90 tiempo de compilación.

Cuestiones relacionadas