В чем разница между find_package (MPI) и FindMPI? - PullRequest
0 голосов
/ 09 января 2020

Как указано в документации для CMake 3.0, find_package(MPI) и FindMPI кажутся взаимозаменяемыми? Но мои вопросы:

  • В чем различия между этими двумя?
  • Это также относится к последней версии?
  • Кроме того, FindMPI предоставляет что-то похожее на опцию REQUIRED в find_package()?

Ответы [ 2 ]

3 голосов
/ 09 января 2020

Поскольку FindMPI является одним из модулей поиска , предоставляемых установкой CMake, вызовы find_package(MPI) и include(FindMPI) по существу эквивалентны. (include() здесь требуется для загрузки модуля; простое запись FindMPI в файл CMake приведет к ошибке.)

Команда find_package() имеет два режима: MODULE и CONFIG. По умолчанию используется режим MODULE, а из документации find_package():

В режиме модуля CMake ищет файл с именем Find<PackageName>.cmake. Файл сначала ищется в CMAKE_MODULE_PATH, затем среди модулей поиска, предоставляемых установкой CMake.

Поэтому find_package(MPI) будет искать файл с именем FindMPI.cmake, что эквивалентно команда include(FindMPI). Это верно, если у вас не определен другой файл FindMPI.cmake в вашем CMAKE_MODULE_PATH.

Хотя они, по сути, эквивалентны командам, вызов find_package() обычно более полезен, поскольку позволяет передавать аргументы, например REQUIRED, для дальнейшего указания того, как загружаются параметры внешнего проекта.

1 голос
/ 09 января 2020

Кажется, я понял это. find_package() и FindMPI - это две разные вещи. В то время как find_package() является командой сценариев CMake, FindMPI является модулем CMake.

Как указано в документации find_package(), можно выбрать режим «Модуль», с помощью которого он ищет пакеты. Это означает, что когда вы вызываете find_package(MPI), он будет использовать модуль FindMPI (записанный в файле FindMPI.cmake) для поиска библиотеки MPI.

Аналогичные вещи, когда вы пытаетесь найти другие пакеты, все из которых перечислены здесь .

...