Можно рассматривать find_package
как удобную оболочку вокруг include
команды, специально разработанной для поиска пакетов :
find_package()
автоматически преобразует имя пакета в файл Find<package>.cmake
, который включен.
find_package()
автоматически устанавливает некоторые переменные на основе его параметров.Например, переменная <package>_FIND_COMPONENTS
будет содержать список запрошенных компонентов.
После возврата включенного файла find_package()
может проверить переменную <package>_FOUND
и выдает ошибку, если переменная ЛОЖЬ, но пакет ОБЯЗАТЕЛЬНО.
На самом деле, точки 1,3 относятся к режиму MODULE find_package
.В режиме CONFIG они заменяются на:
1 '.Имя включенного файла обрабатывается как <package>Config.cmake
или <package>-config.cmake
, а поиск выполняется с использованием полностью другого алгоритма , чем в режиме MODULE (который, например, include()
использует CMAKE_MODULE_PATH
переменная).
3 '.После возврата включенного файла find_package()
может проверить переменные <package>_FOUND
и и найти следующий включаемый файл , который может попытаться снова найти пакет.Если больше никаких включаемых файлов не найдено, и пакет ТРЕБУЕТСЯ, ошибка будет отправлена.
Более подробную информацию о find_package
работе можно найти в документации .