内置依存项(“元包”)

内置依赖项(“元包”)

注意

元包处于实验阶段!欢迎通过向 fpm 存储库 提交问题来帮助我们改进。

大多数实际应用需要的依赖项并非自包含的 Fortran 包;相反,这些依赖项包含一些具有系统依赖安装步骤的库,而且通常使用多种语言接口提供。从 0.8.3 开始,fpm 通过 metapackage 特性支持对这些库的子集进行自动发现和绑定。

可以通过在 [dependencies] 部分中调用元包名称,在清单中启用元包。以下是启用包中 OpenMP 的方法

name = "my_openmp_package"
dependencies.openmp = "*"

与此等效

name = "my_openmp_package"
[dependencies]
openmp = "*"

注意

使用 "*" 通配符启用元包,意思是任何版本,不能使用布尔标志。版本要求暂不支持,将在未来的版本中引入。

可以在 fpm 安装目录下的 example_packages/metapackage_* 文件夹中找到几个预构建的示例。

fortran-lang 标准库 (stdlib)

此依赖项会自动下载 fortran-lang 标准库 的最新版本,并作为 Git 依赖项将其添加到项目中。

name = "with_stdlib"
dependencies.stdlib = "*"

fortran-lang MINPACK

此依赖项会自动下载经过现代化的 fortran-lang MINPACK 的 v2.0.0-rc1 版本,并作为 Git 依赖项将其添加到项目中。

name = "with_minpack"
dependencies.minpack = "*"

OpenMP

此依赖项会自动添加合适的编译器标志来启用 OpenMP 支持,从而编译并运行 fpm 目标。

name = "my_openmp_package"
dependencies.openmp = "*"

MPI

name = "my_parallel_app"
dependencies.mpi = "*"

Fortran、C 和 C++ 语言支持 MPI。 fpm 将执行特定于系统的步骤,以查找并匹配系统上可用的 MPI 库与 fpm 编译器。 fpm 首先将搜索标准 MPI 编译器包装器(mpifortmpif90mpif77mpiccmpicxx,…),然后尝试将其与当前适用于 Fortran、C 和 C++ 的 fpm 编译器进行匹配。

如果路径中没有可用的包装器,则可以通过设置 shell 中的环境变量 MPICCMPICXXMPIFCMPIF90MPIF77 来启用它们。对于 IntelMPI,fpm 也将查找包装器以及 I_MPI_ROOT 的环境变量 I_MPI_CCI_MPI_CXXI_MPI_f90。找到包装器与编译器的匹配项时,会对其进行查询以检索适当的编译器和运行器命令,以及构建和链接标志。

Windows 为 MSMPI 包采取了特殊步骤。应该安装 MS-MPI SDK 以使用 MS-MPI 支持构建项目。此外,MS-MPI 仅可与 MSYS2 GNU 编译器套件和 MS-MPI 预构建 Fortran 模块 结合使用。MS-MPI 安装可以通过 MSMPI_BIN 环境变量查找,或者通过在本地路径中或在默认文件夹 C:\Program Files\Microsoft MPI\Bin\ 中搜索 mpiexec.exe 来查找。

MPI 应用程序可以使用 mpirunmpiexec 手动运行,或者直接使用 fpm run 命令通过 fpm 运行。在后一种情况下,MPI 运行程序将在当前节点上使用默认进程数。为了自定义 MPI 运行器命令,可以使用 --runner--runner-args 选项,例如

./fpm run --runner=" sbatch script.sh"
./fpm run --runner-args=" -np 12 -N 2"

请注意,--runner 可用于覆盖默认运行器命令 (mpiexecmpirun),而 --runner-args 应该用于将参数传递给运行器本身,例如进程数。

当前验证的系统配置如下

  • MacOS/x86_64 + GCC + OpenMPI(通过 brew)

  • MacOS/x86_64 + GCC + MPICH(通过 brew)

  • Linux/x86_64 + GCC + OpenMPI(通过 apt)

  • Linux/x86_64 + GCC + MPICH(通过 apt)

  • Linux/x86_64 + Intel + IntelMPI(通过 apt)

  • Windows/x86_64 + MinGW + MSMPI(通过 msys2)

  • Windows/x86_64 + Intel oneAPI + IntelMPI(通过脱机安装程序)

注意

macOS 上没有 MPI C++ 支持,因为 homebrew 是使用 clang 构建的,其 C++ ABI 与 GNU C++ ABI 不兼容,后者是链接 gfortran 所需的。