2

Fortran でのモジュールの構築は、特定の順序で行う必要があります。たとえば、ファイルA.fが で定義されたモジュールB.fを必要とする場合、最初にコンパイルB.fする必要があります。Scons でそのようなビルド順序を課すにはどうすればよいですか? ソース ファイルのリストを提供すると、アルファベット順に並べ替えられます (前にコンパイルされます)。関数について読みましたが、それらを機能させることができませんでした。A.fB.fRequires()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

4

1 に答える 1

5

あなたのプログラムは (提案されているように) モジュールを使用していますか? そこにはいくつかの落とし穴があります:

  1. FORTRANMODDIR を定義する必要があります。これに関する議論については、http ://scons.tigris.org/ds/viewMessage.do?dsForumId=1272&dsMessageId=82725 を参照してください。
  2. モジュール定義とソース コードが混在するソース ファイルを使用すると、ある程度の混乱が生じることがわかりました。
于 2013-11-12T10:41:16.727 に答える