gpt4 book ai didi

cmake - 如何让 CMake 构建具有 MPI 支持的 Fortran 程序?

转载 作者:行者123 更新时间:2023-12-04 02:19:10 24 4
gpt4 key购买 nike

我正在尝试使用 MPI 并行化 Fortran 程序。我使用 CMake 来构建我的程序。很难在谷歌上找到支持让 CMake 为具有 MPI 支持的 Fortran 创建工作 makefile 的支持,但据我所知,我将以下命令添加到我的 CMakeLists.txt 脚本中:

find_package(MPI REQUIRED)
add_definitions(${MPI_Fortran_COMPILE_FLAGS})
include_directories(${MPI_Fortran_INCLUDE_DIRS})
link_directories(${MPI_FortranLIBRARY_DIRS})

这将在我的系统上找到 MPI,然后设置在以下三个命令中找到的变量。在我的链接行中,我将 MPI 库变量添加到我的程序需要构建的其他库的列表中。

target_link_libraries(${exe_name} otherlibs ${MPI_FortranLIBRARY_DIRS})

执行 cmake 然后 make 构建程序并运行;但是,当我尝试向源代码中添加更多内容时,需要我包含 mpif.h 包含文件,但由于无法找到此头文件,我的编译失败了。我也无法 use mpi 因为编译器无法在路径中找到 mpi.mod 文件。

最佳答案

我将“消息”命令插入到我的 CMakeLists.txt 文件中,并打印出我用于包含和链接的变量值。结果是变量 MPI_Fortran_INCLUDE_DIRSMPI_FortranLIBRARY_DIRS 没有设置任何值。检查 CMake 实际用于设置这些变量的模块 (FindMPI.cmake) 显示这些变量不存在。我更改了 CMakeLists.txt 文件以使用正确的变量:

find_package(MPI REQUIRED)
add_definitions(${MPI_Fortran_COMPILE_FLAGS})
include_directories(${MPI_Fortran_INCLUDE_PATH})
link_directories(${MPI_Fortran_LIBRARIES})
target_link_libraries(${exe_name} otherlibs ${MPI_Fortran_LIBRARIES})

现在,当我执行 make 时,编译器可以同时找到 mpif.hmpi.mod

更新:

我想提一下,此解决方案适用于 cmake 版本 2.8.10.1。当我将我的 CMakeLists.txt 脚本移动到另一台具有 cmake 版本 2.8.4 的机器时,我在链接阶段遇到关于 mpi.mod 丢失的相同错误。我检查了 FindMPI.cmake 模块,果然,没有指定语言的变量(即没有 MPI_Fortran_LIBRARIES 变量,只有一个 MPI_LIBRARIES 变量,而这个变量未设置到该系统上 mpi 库的正确位置。因此此解决方案将取决于 cmake 版本。

关于cmake - 如何让 CMake 构建具有 MPI 支持的 Fortran 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16375596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com