cmake
Поиск и использование установленных пакетов, библиотек и программ
Поиск…
Синтаксис
- find_package (pkgname [версия] [EXACT] [QUIET] [ТРЕБУЕТСЯ])
- включают в себя (FindPkgConfig)
- pkg_search_module (префикс [ТРЕБУЕТСЯ] [QUIET] pkgname [otherpkg ...])
- pkg_check_modules (префикс [ТРЕБУЕТСЯ] [QUIET] pkgname [otherpkg ...])
параметры
| параметр | подробности |
|---|---|
| версия (необязательно) | Минимальная версия пакета, определяемая основным номером и необязательно небольшим, патчем и номером настройки, в формате major.minor.patch.tweak |
| EXACT (необязательно) | Укажите, что версия, указанная в version является точной версией, которая будет найдена |
| ТРЕБУЕТСЯ (необязательно) | Автоматически выдает ошибку и останавливает процесс, если пакет не найден |
| QUIET (необязательно) | Функция не будет отправлять какое-либо сообщение на стандартный вывод |
замечания
Способ
find_packageсовместим со всей платформой, тогда как путьpkg-configдоступен только на Unix-подобных платформах, таких как Linux и OSX.Полное описание многочисленных параметров и опций
find_packageможно найти в руководстве .Несмотря на то, что можно указать многие дополнительные параметры, такие как версия пакета, не все модули Find правильно используют все эти параметры. Если произойдет какое-либо неопределенное поведение, может потребоваться найти модуль в пути установки CMake и исправить или понять его поведение.
Используйте find_package и найдите .cmake модули
По умолчанию для поиска установленных пакетов с CMake используется функция find_package в сочетании с файлом Find<package>.cmake . Цель файла - определить правила поиска для пакета и установить разные переменные, такие как <package>_FOUND , <package>_INCLUDE_DIRS и <package>_LIBRARIES .
Многие файлы Find<package>.cmake уже определены по умолчанию в CMake. Однако, если нет ${CMAKE_SOURCE_DIR}/cmake/modules файла для пакета, вы всегда можете написать свой собственный и поместить его в ${CMAKE_SOURCE_DIR}/cmake/modules (или любой другой каталог, если CMAKE_MODULE_PATH был переопределен)
Список модулей по умолчанию можно найти в руководстве (v3.6) . Необходимо проверить руководство в соответствии с версией CMake, используемой в проекте, или же там могут отсутствовать модули. Также можно найти установленные модули с помощью cmake --help-module-list .
Хороший пример для FindSDL2.cmake на Github
Вот базовый CMakeLists.txt , который потребует SDL2:
cmake_minimum_required(2.8 FATAL_ERROR)
project("SDL2Test")
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules")
find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} main.c)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})
Используйте pkg_search_module и pkg_check_modules
В Unix-подобных операционных системах можно использовать программу pkg-config для поиска и настройки пакетов, которые предоставляют файл <package>.pc .
Чтобы использовать pkg-config , необходимо include(FindPkgConfig) в CMakeLists.txt . Тогда есть две возможные функции:
-
pkg_search_module, который проверяет пакет и использует первый доступный. -
pkg_check_modules, которые проверяют все соответствующие пакеты.
Вот базовый CMakeLists.txt который использует pkg-config для поиска SDL2 с версией выше или равной 2.0.1:
cmake_minimum_required(2.8 FATAL_ERROR)
project("SDL2Test")
include(FindPkgConfig)
pkg_search_module(SDL2 REQUIRED sdl2>=2.0.1)
include_directories(${SDL2_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} main.c)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})