首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scons Fortran文件的构建顺序

Scons Fortran文件的构建顺序
EN

Stack Overflow用户
提问于 2013-11-12 02:56:41
回答 1查看 973关注 0票数 2

在Fortran中构建模块需要按照特定的顺序进行,例如,如果一个文件A.f需要在B.f中定义的模块,那么B.f首先需要编译。我如何在Scon中强制执行这样的构建顺序?如果我向它提供源文件列表,它会按字母顺序排列它们(因此A.f是在B.f之前编译的)。我读过关于Requires()Depends()函数的文章,但没能让它们为我工作。

我很乐意列出源文件,以便编译它们(因此禁用按字母顺序对它们进行重组),但任何其他方法也会受到欢迎。

根据凯尔的要求,这是我的Sconscript和一个构建日志:

代码语言:javascript
复制
# 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)

这就产生了:

代码语言:javascript
复制
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之前编译的,尽管它在我的列表中紧随其后。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-12 10:41:16

您的程序(如建议的)是否使用模块?有几个问题:

  1. FORTRANMODDIR需要定义:有关这方面的讨论,请参见http://scons.tigris.org/ds/viewMessage.do?dsForumId=1272&dsMessageId=82725
  2. 我发现,包含模块定义和源代码混合的源文件会造成一定程度的混乱。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19920040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档