1. Plantillas
1.1. Boiler plate
Este es un buen punto de partida para construir todos los programas escritos en Fortran. Tiene una referencia al entorno iso y además tiene implicit none
program Boiler_plate
use iso_fortran_env
implicit none
module mod_hola_mundo
! Datos globales
end module mod_hola_mundo
contains
subroutine hola_mundo
! Test
end subroutine hola_mundo
end program Boiler_plate
1.2. Makefile
Este es un ejemplo de un Makefile. Básicamente obtiene un listado de todos los ficheros fuente .f90 del directorio src y genera una lista de targets que asocia al directorio app.
FC = gfortran
CAF = caf
SRC = $(wildcard src/*.f90)
FILES_NO_EXT = $(notdir $(SRC))
TARGETS = $(addprefix app/,$(FILES_NO_EXT:.f90=))
# Modules
MOD_SRC = $(wildcard src/mod/*.f)
MOD_TARGETS = $(addprefix app/mod/,$(notdir $(MOD_SRC:.f=.mod)))
# Arguments
ARGS = -Wall -Wextra -std=f2018 -O3 -pedantic -fdec-math -ffree-form -Imod
all: app mod $(TARGETS)
# Make target directory
app mod:
@mkdir -p app
@mkdir -p mod
# Caso genérico
app/%: src/%.f90
$(FC) $(ARGS) $< -o $@
clean:
@rm -f $(TARGETS)
@rm -f mod/*.mod mod/*.o
Este otro lo he usado más y me da buenos resultados
FC = gfortran
CAF = caf
SRC = $(wildcard src/*.f)
FILES_NO_EXT = $(notdir $(SRC))
TARGETS = $(addprefix app/,$(FILES_NO_EXT:.f=))
# Modules
MOD_SRC = $(wildcard src/mod/*.f)
MOD_TARGETS = $(addprefix app/mod/,$(notdir $(MOD_SRC:.f=.mod)))
# Arguments
#ARGS = -Wall -Wextra -std=f2018 -O3 -pedantic -fdec-math -ffree-form -Imod
ARGS = -std=f2018 -ffree-form -Imod
all: app mod $(TARGETS)
# Make target directory
app mod:
@mkdir -p app
@mkdir -p mod
# Caso genérico
app/%: src/%.f
$(FC) $(ARGS) $< -o $@
clean:
@rm -f $(TARGETS)
@rm -f mod/*.mod mod/*.o
1.3. Language Server
Se encuentra en el paquete fortran-language-server
. Puede ser arrancado mediante la orden fortls
El paquete contiene estos archivos
samuel@hp-i5:~$ apt-file list fortran-language-server
fortran-language-server: /usr/bin/fortls
fortran-language-server: /usr/lib/python3/dist-packages/fortls/__init__.py
fortran-language-server: /usr/lib/python3/dist-packages/fortls/intrinsic_funs.json
fortran-language-server: /usr/lib/python3/dist-packages/fortls/intrinsic_mods.json
fortran-language-server: /usr/lib/python3/dist-packages/fortls/intrinsics.py
fortran-language-server: /usr/lib/python3/dist-packages/fortls/jsonrpc.py
fortran-language-server: /usr/lib/python3/dist-packages/fortls/keywords.json
fortran-language-server: /usr/lib/python3/dist-packages/fortls/langserver.py
fortran-language-server: /usr/lib/python3/dist-packages/fortls/objects.py
fortran-language-server: /usr/lib/python3/dist-packages/fortls/parse_fortran.py
fortran-language-server: /usr/lib/python3/dist-packages/fortls/statements.json
fortran-language-server: /usr/lib/python3/dist-packages/fortran_language_server-1.10.3.egg-info/PKG-INFO
fortran-language-server: /usr/lib/python3/dist-packages/fortran_language_server-1.10.3.egg-info/dependency_links.txt
fortran-language-server: /usr/lib/python3/dist-packages/fortran_language_server-1.10.3.egg-info/entry_points.txt
fortran-language-server: /usr/lib/python3/dist-packages/fortran_language_server-1.10.3.egg-info/requires.txt
fortran-language-server: /usr/lib/python3/dist-packages/fortran_language_server-1.10.3.egg-info/top_level.txt
fortran-language-server: /usr/share/doc/fortran-language-server/README.rst.gz
fortran-language-server: /usr/share/doc/fortran-language-server/changelog.Debian.gz
fortran-language-server: /usr/share/doc/fortran-language-server/copyright
fortran-language-server: /usr/share/man/man1/fortls.1.gz