内置依存项(“元包”)
目录
内置依赖项(“元包”)¶
注意
元包处于实验阶段!欢迎通过向 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 编译器包装器(mpifort
、mpif90
、mpif77
、mpicc
、mpicxx
,…),然后尝试将其与当前适用于 Fortran、C 和 C++ 的 fpm
编译器进行匹配。
如果路径中没有可用的包装器,则可以通过设置 shell 中的环境变量 MPICC
、MPICXX
、MPIFC
、MPIF90
或 MPIF77
来启用它们。对于 IntelMPI,fpm 也将查找包装器以及 I_MPI_ROOT
的环境变量 I_MPI_CC
、I_MPI_CXX
和 I_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 应用程序可以使用 mpirun
或 mpiexec
手动运行,或者直接使用 fpm run
命令通过 fpm 运行。在后一种情况下,MPI 运行程序将在当前节点上使用默认进程数。为了自定义 MPI 运行器命令,可以使用 --runner
和 --runner-args
选项,例如
./fpm run --runner=" sbatch script.sh"
./fpm run --runner-args=" -np 12 -N 2"
请注意,--runner
可用于覆盖默认运行器命令 (mpiexec
或 mpirun
),而 --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 所需的。