在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
之前编译的,即使它在我的列表中也是如此。
答案 0 :(得分:5)
您的程序(如建议的)是否使用模块?那里有几个陷阱: