首页 > 解决方案 > find_package(MPI) 和 FindMPI 有什么区别?

问题描述

如CMake 3.0文档中所述find_package(MPI)FindMPI似乎可以互换?但我的问题是:

标签: cmakempi

解决方案


因为FindMPI是CMake 安装提供的Find Modulesfind_package(MPI)之一,和include(FindMPI)调用本质上是等价的。(include()此处需要 加载模块;简单地写入FindMPICMake 文件将导致错误。)

find_package()命令有两种模式:MODULECONFIG。默认为MODULE模式,并且来自find_package()文档:

在模块模式下,CMake 搜索一个名为Find<PackageName>.cmake. 该文件首先在 中搜索CMAKE_MODULE_PATH,然后在 CMake 安装提供的 Find Modules 中搜索。

因此,find_package(MPI)会搜索一个名为 的文件FindMPI.cmake,相当于命令include(FindMPI). 除非您FindMPI.cmakeCMAKE_MODULE_PATH.

虽然它们本质上等同于命令,但调用find_package()通常更有用,因为它允许您传递参数,例如REQUIRED,以进一步指定如何加载外部项目的设置。


推荐阅读