私はいくつかのf90ファイルを通常のgfortranコンパイラを使ってコンパイルする必要があり、いくつかはmpifortラッパーを使ってコンパイルする必要があるプロジェクトを持っています。私は適切にこれを収容するためにCMakeファイルを書く方法を知らない。また、以前はCMakeを使ったことがありませんでしたが、それに精通していませんが、ドキュメンテーションや(かなり古くなった)チュートリアルから理解しようとしています。次のようにgfortranとmpifortの両方でFortranプロジェクト用のCMakeファイルを書く
マイプロジェクトディレクトリに見えます:./src/
ディレクトリで
├── CMakeLists.txt
├── README.md
├── bin
├── build
├── compile
├── src
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ │ ├── 3.8.1
│ │ │ ├── CMakeCCompiler.cmake
│ │ │ ├── CMakeCXXCompiler.cmake
│ │ │ ├── CMakeDetermineCompilerABI_C.bin
│ │ │ ├── CMakeDetermineCompilerABI_CXX.bin
│ │ │ ├── CMakeDetermineCompilerABI_Fortran.bin
│ │ │ ├── CMakeFortranCompiler.cmake
│ │ │ ├── CMakeSystem.cmake
│ │ │ ├── CompilerIdC
│ │ │ │ ├── CMakeCCompilerId.c
│ │ │ │ ├── a.out
│ │ │ │ └── tmp
│ │ │ ├── CompilerIdCXX
│ │ │ │ ├── CMakeCXXCompilerId.cpp
│ │ │ │ ├── a.out
│ │ │ │ └── tmp
│ │ │ └── CompilerIdFortran
│ │ │ ├── CMakeFortranCompilerId.F
│ │ │ ├── a.out
│ │ │ └── tmp
│ │ ├── CMakeDirectoryInformation.cmake
│ │ ├── CMakeOutput.log
│ │ ├── CMakeTmp
│ │ ├── Makefile.cmake
│ │ ├── Makefile2
│ │ ├── TargetDirectories.txt
│ │ ├── cmake.check_cache
│ │ ├── feature_tests.bin
│ │ ├── feature_tests.c
│ │ ├── feature_tests.cxx
│ │ ├── progress.marks
│ │ └── streetcanyon.dir
│ │ ├── DependInfo.cmake
│ │ ├── INC_BBB.f90.o
│ │ ├── INC_BBB.f90.o.provides.build
│ │ ├── INC_BC.f90.o
│ │ ├── INC_BC.f90.o.provides.build
│ │ ├── INC_BOUNDC.f90.o
│ │ ├── INC_BOUNDC.f90.o.provides.build
│ │ ├── INC_BUOY.f90.o
│ │ ├── INC_BUOY.f90.o.provides.build
│ │ ├── INC_COEF.f90.o
│ │ ├── INC_COEF.f90.o.provides.build
│ │ ├── INC_COEFB.f90.o
│ │ ├── INC_COEFB.f90.o.provides.build
│ │ ├── INC_GEO.f90.o
│ │ ├── INC_GEO.f90.o.provides.build
│ │ ├── INC_INDEX.f90.o
│ │ ├── INC_INDEX.f90.o.provides.build
│ │ ├── INC_OBSTACLE.f90.o
│ │ ├── INC_OBSTACLE.f90.o.provides.build
│ │ ├── INC_PAR.f90.o
│ │ ├── INC_PAR.f90.o.provides.build
│ │ ├── INC_PRINT.f90.o
│ │ ├── INC_PRINT.f90.o.provides.build
│ │ ├── INC_SOURCE.f90.o
│ │ ├── INC_SOURCE.f90.o.provides.build
│ │ ├── INC_STAT.f90.o
│ │ ├── INC_STAT.f90.o.provides.build
│ │ ├── INC_TIME.f90.o
│ │ ├── INC_TIME.f90.o.provides.build
│ │ ├── INC_TITLE.f90.o
│ │ ├── INC_TITLE.f90.o.provides.build
│ │ ├── INC_TREES.f90.o
│ │ ├── INC_TREES.f90.o.provides.build
│ │ ├── INC_UVW.f90.o
│ │ ├── INC_UVW.f90.o.provides.build
│ │ ├── INC_VEC.f90.o
│ │ ├── INC_VEC.f90.o.provides.build
│ │ ├── INC_WALL.f90.o
│ │ ├── INC_WALL.f90.o.provides.build
│ │ ├── build.make
│ │ ├── cmake_clean.cmake
│ │ ├── cmake_clean_Fortran.cmake
│ │ ├── depend.internal
│ │ ├── depend.make
│ │ ├── flags.make
│ │ ├── fortran.internal
│ │ ├── inc_bbb.mod.stamp
│ │ ├── inc_bc.mod.stamp
│ │ ├── inc_boundc.mod.stamp
│ │ ├── inc_buoy.mod.stamp
│ │ ├── inc_coef.mod.stamp
│ │ ├── inc_coefb.mod.stamp
│ │ ├── inc_geo.mod.stamp
│ │ ├── inc_index.mod.stamp
│ │ ├── inc_obstacle.mod.stamp
│ │ ├── inc_par.mod.stamp
│ │ ├── inc_print.mod.stamp
│ │ ├── inc_source.mod.stamp
│ │ ├── inc_stat.mod.stamp
│ │ ├── inc_time.mod.stamp
│ │ ├── inc_title.mod.stamp
│ │ ├── inc_trees.mod.stamp
│ │ ├── inc_uvw.mod.stamp
│ │ ├── inc_vec.mod.stamp
│ │ ├── inc_wall.mod.stamp
│ │ ├── link.txt
│ │ └── progress.make
│ ├── INC_BBB.f90
│ ├── INC_BC.f90
│ ├── INC_BOUNDC.f90
│ ├── INC_BUOY.f90
│ ├── INC_COEF.f90
│ ├── INC_COEFB.f90
│ ├── INC_GEO.f90
│ ├── INC_INDEX.f90
│ ├── INC_OBSTACLE.f90
│ ├── INC_PAR.f90
│ ├── INC_PAR.f90_8ob
│ ├── INC_PRINT.f90
│ ├── INC_SOURCE.f90
│ ├── INC_STAT.f90
│ ├── INC_TIME.f90
│ ├── INC_TITLE.f90
│ ├── INC_TREES.f90
│ ├── INC_UVW.f90
│ ├── INC_VEC.f90
│ ├── INC_WALL.f90
│ ├── Makefile
│ ├── cmake_install.cmake
│ ├── grid_binary
│ ├── grid_binary(8\ obsttacles)
│ ├── inc_bbb.mod
│ ├── inc_bc.mod
│ ├── inc_boundc.mod
│ ├── inc_buoy.mod
│ ├── inc_coef.mod
│ ├── inc_coefb.mod
│ ├── inc_geo.mod
│ ├── inc_index.mod
│ ├── inc_obstacle.mod
│ ├── inc_par.mod
│ ├── inc_print.mod
│ ├── inc_source.mod
│ ├── inc_stat.mod
│ ├── inc_time.mod
│ ├── inc_title.mod
│ ├── inc_trees.mod
│ ├── inc_uvw.mod
│ ├── inc_vec.mod
│ ├── inc_wall.mod
│ ├── mpi_par.f90
│ ├── source
│ ├── streetcanyon.f90
│ └── streetcanyon.f90~
mpifort
使用してコンパイルするstreetcanyon.f90
とmpi_par.f90
必要性が、残りはgfortran
を介して行うことができます。 streetcanyon.f90
を最終実行ファイルにコンパイルする必要があります。私は、プロジェクトのルートディレクトリに含まれている以下のCMakeList.txt
を使用して試してみました:私はFortranのための適切なプロジェクト構造を以下だ場合、私はまた、知らない
#./CMakeList.txt
cmake_minimum_required (VERSION 3.8.0)
project(mpi)
enable_language (Fortran)
file(GLOB SOURCES src/*.f90)
add_executable(streetcanyon ${SOURCES})
。
MPIラッパーですべてをコンパイルできないのはなぜですか?それが私のプロジェクトでやっていることです。 –
それは可能かもしれないが、それは悪い習慣かもしれないと思った。例えば 'gfortran'の代わりに' mpifort'を呼ぶとき、何が「フードの下で」起こっているのか正確には分かりません。 – Lars
本当に悪いことはありません。 MPIラッパーですべてをコンパイルしない理由はわかりません。どのようにしてどのように決定するのですか? –