Introducción a Scons - scons Howto para Fortran
1 - scons Howto para Fortran
Para los que ya están hartos de utilizar el GNU make y sus infames makefiles os gustará saber que ya estoy utilizando su alternativa scons. He aquí unos cuantos ejemplos:
scons necesita un único archivo de configuración para compilar los archivos de código fuente llamado SConstruct. En realidad es un archivo en python que utiliza las funciones de scons que previamente ha importado por defecto. Lo único necesario es conocer unas pocas variables del sistema y algo de python (muy poco)
Por ejemplo, para compilar un pequeño archivo en Fortran 95 con el compilador gfortran basta con escribir el archivo SConstruct de la siguiente manera.
Sconstruct:
import os
# Collection of possible fortran compilers
FC='gfortran-4.0.2'
CC=FC
#FC='ifort'
# Optimization flags
FFLAGS='-g'
env = Environment(CC=CC,FORTRAN=FC,FORTRANFLAGS=FFLAGS,ENV=os.environ)
env.Program('test.exe',['core_test.f95',
'sudoku_routines.f95',
'sudoku_toolkit.f95'])
#object_files=env.Object(['sudoku_routines.f95',
# 'core_test.f95'])
print '**********************************'
print 'System is:',os.name
print 'Fortran compiler is:',env['FORTRAN']
print 'Fortran options are:',env['FORTRANFLAGS']
print '**********************************'
Para compilar y crear el ejecutable...
guillem@peret ~/Workspace/Various/IPNSS $ scons scons: Reading SConscript files ... ********************************** System is: posix Fortran compiler is: gfortran-4.0.2 Fortran options are: -g ********************************** scons: done reading SConscript files. scons: Building targets ... gfortran-4.0.2 -g -c -o sudoku_toolkit.o sudoku_toolkit.f95 gfortran-4.0.2 -g -c -o sudoku_routines.o sudoku_routines.f95 gfortran-4.0.2 -g -c -o core_test.o core_test.f95 gfortran-4.0.2 -o test.exe core_test.o sudoku_routines.o sudoku_toolkit.o scons: done building targets.
Para limpiar los archivos temporales basta con utilizar el siguiente comando:
guillem@peret ~/Workspace/Various/IPNSS $ scons -c scons: Reading SConscript files ... ********************************** System is: posix Fortran compiler is: gfortran-4.0.2 Fortran options are: -g ********************************** scons: done reading SConscript files. scons: Cleaning targets ... Removed sudoku_toolkit.o Removed sudoku_toolkit.mod Removed sudoku_routines.o Removed sudoku_routines.mod Removed core_test.o Removed test.exe scons: done cleaning targets.
Como el archivo SConstruct es en realidad un archivo de código en Python las capacidad de interacción con el sistema es mucho mayor. Podeis utilizar scons como interfaz para aplicaciones adicionales de un modo mucho más simple que con make. Por ejemplo, así compilo el código del canal definiendo variables adicionales para compilar con soporte para debugging y para correr el ejecutable.
Sonstruct
import os
# Collection of possible fortran compilers
FC='ifort'
CC=FC
#FC='ifort'
# Optimization flags
FFLAGS='-O3 -tpp7 -parallel '
CF='-O3 -tpp7 -parallel '
env = Environment(CC=CC,
FORTRAN=FC,
FORTRANFLAGS=FFLAGS,
LINKFLAGS=CF,
LIBS=['blas'],
ENV=os.environ)
debug = ARGUMENTS.get('debug',0)
run = ARGUMENTS.get('run',0)
if int(debug):
env['FORTRANFLAGS'] ='-g'
env['LINKFLAGS']='-g'
if int(run):
os.system('./chan15.exe')
env.Program('chan15.exe',['abc.f',
'calcmax.f',
'cfric.f',
'chan15.f',
'constr.f',
'constr2.f',
'cpres.f',
'csh.f',
'cvmax.f',
'divg.f',
'eddyv.f',
'filter.f',
'info.f',
'initial.f',
'inivel.f',
'invert.f',
'loperator.f',
'noperator.f',
'press.f',
'rftsingle.f',
'rw.f',
'stats.f',
'trans.f',
'ufinal.f',
'uhat.f',
'wave.f',
'write_inflow.f',
'write_wallp.f',
'gstore.f'])
print '**********************************'
print 'System is:',os.name
print 'Fortran compiler is:',env['FORTRAN']
print 'Fortran options are:',env['FORTRANFLAGS']
print 'Linker flags are:',env['LINKFLAGS']
print 'Libraries used are:',env['LIBS']
print '**********************************'
Puedo utilizar los siguientes comandos:
scons # compilar los archivos scons -c # limpiar los archivos temporales scons -Q debug=1 # cambia las opciones de compilación a -g (debugging) scons -Q run=1 # ejecuta el programa
Creo que es una opción lo suficientemente interesante como para jubilar el obsoleto make.
|
Opiniona sobre 'Introducción a Scons - scons Howto para Fortran' (0)
Opina sobre este tutorial |

