Поиск…


Синтаксис

  • 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})


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow