#Что означает ошибка
CMake Error: Could not find a package configuration file provided by "Boost"
Could not find a package configuration file provided by "Foo" в CMake означает, что команда find_package(Foo) не нашла файл FooConfig.cmake или foo-config.cmake. Библиотека либо не установлена, либо установлена в нестандартное место, либо не установлена часть для разработки (dev-пакет).
CMake сам подсказывает в тексте ошибки, какую переменную задать.
Нужно установить библиотеку и указать путь поиска.
CMake не нашёл библиотеку, указанную в find_package: она не установлена либо находится в нестандартном каталоге. Установите пакет разработки и укажите путь через CMAKE_PREFIX_PATH.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Библиотека не установлена | Нет пакета dev. | Установите. |
| Нестандартный путь | Установлена вручную. | Задайте CMAKE_PREFIX_PATH. |
| Другая архитектура | 32/64 бит. | Проверьте. |
| Устаревший кэш | CMakeCache. | Удалите. |
#Пошаговое решение
- Определите имя пакета из ошибкиОткройте терминал в корне проекта и повторите команду конфигурации CMake, сохранив полный текст ошибки. Найдите, что именно указано после
find_packageи какие имена перечислены:FooConfig.cmake,foo-config.cmakeилиFindFoo.cmake. Не вводите слово Foo буквально: это пример имени вашей библиотеки. Выполнитеcmake --versionи проверьте, какой компилятор и способ сборки использует проект. Если ошибка относится к пакетам сборочной среды (например, MSVC), не начинайте с установки произвольной библиотеки под Linux. - Установите dev-пакет библиотекиЕсли зависимость действительно не установлена, найдите официальное название её пакета разработки и версию, совместимую с вашим проектом. Для Linux используйте менеджер пакетов своего дистрибутива (
apt,dnf), для macOS — выбранный проектом Homebrew, для Windows — vcpkg/Conan или комплект поставки производителя. Файл заголовка и файлFooConfig.cmakeне всегда находятся в одном пакете; у некоторых библиотек предусмотрен режим Module, а не Config. Перед установкой проверьте документацию конкретногоfind_package(Foo CONFIG REQUIRED)и требования проекта. - Найдите FooConfig.cmakeЧтобы найти конфигурацию уже установленной библиотеки, проверяйте известные каталоги установки и вывод менеджера пакетов, а не сканируйте весь
/без необходимости. Например, в Linux выполнитеfind /usr /opt -name 'FooConfig.cmake' 2>/dev/null, заменив Foo реальным именем; на Windows используйте поиск внутри папки SDK или vcpkg. Если файл найден, запишите каталог, в котором он лежит, и путь к префиксу установки. Если файл не найден, вернитесь к установке подходящего dev-пакета, а не создавайте пустой конфигурационный файл. - Укажите путь в CMAKE_PREFIX_PATHЕсли
FooConfig.cmakeсуществует, CMake можно указать реальный путь через-DFoo_DIR=/путь/к/каталогу_с_конфигурациейлибо префикс через-DCMAKE_PREFIX_PATH=/префикс/установки; это альтернативные подходы. Откройте новый пустой каталог сборки, напримерbuild-check, командойcmake -S . -B build-check -DFoo_DIR=/..., предварительно заменив Foo и путь. Не вставляйте строку/opt/fooбез проверки, что там действительно установлена библиотека. После конфигурации запуститеcmake --build build-checkи изучите новую ошибку, если она появилась. - Очистите кэш и запустите cmake зановоЕсли CMake продолжает использовать старый путь из кэша, проверьте переменные в отдельном каталоге сборки:
cmake -LAH -N build-checkвыводит сохранённые значения. Лучше создать новый каталог с другим именем, чем удалять рабочийbuildчерезrm -rf: там могут быть созданные проектом файлы и настройки. Если нужная зависимость найдена, конфигурация закончится безCould not find a package configuration file. При следующем сообщении о несовместимой версии проверьте требования версии и архитектуру библиотеки, а не форсируйте старый конфиг. - Замените Foo и путь на свои; работает в корне проектаLinux · Терминал (Bash)КомандаЗамените Foo и путь на свои; работает в корне проекта. Никакого удаления старого build.
# Только после установки библиотеки и поиска её реального FooConfig.cmake:cmake -S . -B build-check -DFoo_DIR=/РЕАЛЬНЫЙ/КАТАЛОГcmake --build build-check
#Установка библиотеки
Установите dev-пакет: Debian/Ubuntu — sudo apt install libfoo-dev; Fedora/Rocky — sudo dnf install foo-devel; Arch — sudo pacman -S foo; macOS — brew install foo; Windows — vcpkg install foo и toolchain-файл vcpkg. Найдите файл конфигурации: find / -name "FooConfig.cmake" 2>/dev/null или apt-file search FooConfig.cmake. Имя пакета в find_package чувствительно к регистру.
#Указание пути
Если библиотека установлена в нестандартный каталог, передайте путь: cmake -DFoo_DIR=/opt/foo/lib/cmake/Foo .. или cmake -DCMAKE_PREFIX_PATH=/opt/foo ... Переменные окружения: export CMAKE_PREFIX_PATH=/opt/foo:$CMAKE_PREFIX_PATH. Для pkg-config используйте export PKG_CONFIG_PATH=/opt/foo/lib/pkgconfig. Qt — -DCMAKE_PREFIX_PATH=/path/to/Qt/6.x/gcc_64.
#Сборка и кэш
После установки очистите кэш CMake: удалите папку build или файл CMakeCache.txt, иначе результат поиска «не найдено» запоминается. Проверьте версию: find_package(Foo 2.0 REQUIRED) может не подойти. Для проектов с модулем поиска используйте CMAKE_MODULE_PATH. Для vcpkg: -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake. Подробнее — .
# Диагностика на Linux, имя Foo заменить:find /usr /opt -name "FooConfig.cmake" 2>/dev/null# Команда конфигурации выполняется отдельно, после нахождения настоящего файла.