-
Notifications
You must be signed in to change notification settings - Fork 39
Description
Bug Report @luflarois
//
A rotina mpas_isobaric_diagnostics.F tem no seu início:
fortran
! Copyright (c) 2016, Los Alamos National Security, LLC (LANS)
! and the University Corporation for Atmospheric Research (UCAR).
!
! Unless noted otherwise source code is licensed under the BSD license.
! Additional copyright and license information can be found in the LICENSE file
! distributed with this code, or at http://mpas-dev.github.com/license.html
!
module mpas_isobaric_diagnostics
use mpas_dmpar
use mpas_kind_types
use mpas_derived_types
use mpas_pool_routines
use mpas_constants
use mpas_log, only : mpas_log_write
use VerticalInterpolation, only : VerticalInterpolation_ZGEO
Vemos que essa rotina depende da "VerticalInterpolation", que é parte de mpas_vertical_interpolation.F
Logo há uma dependência explícita entre os dois fontes. Se a ordem de compilação não compilar mpas_vertical_interpolation.F antes vai haver um erro por falta do objeto.
Desta forma, o correto pelo padrão Fortran com o Makefile é tornar explícita a dependência. Pode ser que algum compilador "resolva" criando e resolvendo a dependência. A versão minha, GNU Fortran (GCC) 14.1.1 20240507 + a versão do GNU Make 4.4.1 não soluciona isso.
Daí a necessidade do Makefile estra com a dependência explícita. Mostrada abaixo:
makefile
SUFFIXES: .F .o
Add new diagnostic modules to DIAGNOSTIC_MODULES
DIAGNOSTIC_MODULES =
mpas_atm_diagnostic_template.o
mpas_isobaric_diagnostics.o
mpas_cloud_diagnostics.o
mpas_convective_diagnostics.o
mpas_pv_diagnostics.o
mpas_soundings.o
mpas_vertical_interpolation.o \
mpas_isobaric_diagnostics.o: mpas_atm_diagnostics_utils.o mpas_vertical_interpolation.o
E aproveito para dizer, se é que todos lembram, a razão de eu estar tentando usar o FPM. Ele toma conta sozinho das dependências para justamente evitar isso. Eu acredito que devemos manter padronização caso continuemos a usar o make para construir o modelo. E a padronização pede dependência explícita no makefile.