Fortran でのモジュールの構築は、特定の順序で行う必要があります。たとえば、ファイルA.f
が で定義されたモジュールB.f
を必要とする場合、最初にコンパイルB.f
する必要があります。Scons でそのようなビルド順序を課すにはどうすればよいですか? ソース ファイルのリストを提供すると、アルファベット順に並べ替えられます (前にコンパイルされます)。関数について読みましたが、それらを機能させることができませんでした。A.f
B.f
Requires()
Depends()
コンパイルが必要な順序でソース ファイルをリストするだけで十分ですが (したがって、アルファベット順での再シャッフルを無効にします)、他の方法も歓迎されます。
Kyle の要求に従って、これが私の Sconscript とビルド ログです。
# Main program building script
Import('env')
PROGRAM = 'main.exe'
SRC_PREFIX = './src/'
SRC = [ 'array_1D_module.f',
'array_2D_module.f',
'array_3D_module.f',
'thomas_algorithm_module.f',
'histogram_module.f',
'histogram_computer_module.f',
'density_parameters_module.f',
'diffusion3D_aos_z_sub_solver_module.f',
'diffusion3D_aos_y_sub_solver_module.f',
'diffusion3D_aos_x_sub_solver_module.f',
'diffusion3D_aos_solver_module.f',
'nonlinear_diffusion_utilities_module.f',
'nonlinear_diffusion_parameters_module.f',
'derivative_magnitude_computer_module.f',
'nonlinear_diffusion_module.f',
'main_module.f',
'main.f' ]
# Attach prefix to each source file
for i in range( len(SRC) ) :
SRC[i] = SRC_PREFIX + SRC[i]
env.Program(target = PROGRAM, source = SRC)
これにより、次のものが生成されました。
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
ifort -o src/array_1D_module.o -c src/array_1D_module.f
ifort -o src/array_2D_module.o -c src/array_2D_module.f
ifort -o src/array_3D_module.o -c src/array_3D_module.f
ifort -o src/density_parameters_module.o -c src/density_parameters_module.f
ifort -o src/derivative_magnitude_computer_module.o -c src/derivative_magnitude_computer_module.f
ifort -o src/diffusion3D_aos_solver_module.o -c src/diffusion3D_aos_solver_module.f
src/diffusion3D_aos_solver_module.f(7): error #7002: Error in opening the compiled module file. Check INCLUDE paths. [DIFFUSION3D_AOS_Z_SUB_SOLVER_MODULE]
use diffusion3D_aos_z_sub_solver_module, only :
------------^
私のリストではその後に来ますが、density_parameters_module.f
前にコンパイルされました。thomas_algorithm_module.f