Buscar..


Sintaxis

  • find_package (pkgname [version] [EXACT] [QUIET] [REQUIRED])
  • include (FindPkgConfig)
  • pkg_search_module (prefijo [REQUERIDO] [QUIET] pkgname [otherpkg ...])
  • pkg_check_modules (prefijo [REQUIRED] [QUIET] pkgname [otherpkg ...])

Parámetros

Parámetro Detalles
versión (opcional) Versión mínima del paquete definida por un número mayor y, opcionalmente, un número menor, parche y retoque, en el formato major.minor.patch.tweak
EXACTO (opcional) Especifique que la versión especificada en la version es la versión exacta que se encontrará
REQUERIDO (opcional) Envía automáticamente un error y detiene el proceso si no se encuentra el paquete
TRANQUILO (opcional) La función no enviará ningún mensaje a la salida estándar.

Observaciones

  • El modo find_package es compatible en todas las plataformas, mientras que pkg-config solo está disponible en plataformas similares a Unix, como Linux y OSX.

  • Una descripción completa de los numerosos parámetros y opciones de find_package se puede encontrar en el manual .

  • A pesar de que es posible especificar muchos parámetros opcionales, como la versión del paquete, no todos los módulos de búsqueda utilizan correctamente todos esos parámetros. Si ocurre algún comportamiento indefinido, podría ser necesario encontrar el módulo en la ruta de instalación de CMake y corregir o comprender su comportamiento.

Use find_package y Find modulos .cmake

La forma predeterminada de encontrar paquetes instalados con CMake es usar la función find_package junto con un archivo Find<package>.cmake . El propósito del archivo es definir las reglas de búsqueda para el paquete y establecer diferentes variables, como <package>_FOUND , <package>_INCLUDE_DIRS y <package>_LIBRARIES .

Muchos archivos Find<package>.cmake ya están definidos de forma predeterminada en CMake. Sin embargo, si no hay un archivo para el paquete que necesita, siempre puede escribir el suyo propio y colocarlo dentro de ${CMAKE_SOURCE_DIR}/cmake/modules (o cualquier otro directorio si CMAKE_MODULE_PATH fue reemplazado)

Se puede encontrar una lista de módulos predeterminados en el manual (v3.6) . Es esencial verificar el manual de acuerdo con la versión de CMake utilizada en el proyecto o, de lo contrario, podrían faltar módulos. También es posible encontrar los módulos instalados con cmake --help-module-list .

Hay un buen ejemplo para un FindSDL2.cmake en Github

Aquí hay un CMakeLists.txt básico que requeriría 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})

Utilice pkg_search_module y pkg_check_modules

En sistemas operativos similares a Unix, es posible usar el programa pkg-config para encontrar y configurar paquetes que proporcionen un archivo <package>.pc .

Para utilizar pkg-config , es necesario llamar a include(FindPkgConfig) en un CMakeLists.txt . Entonces, hay 2 funciones posibles:

  • pkg_search_module , que comprueba el paquete y utiliza el primero disponible.
  • pkg_check_modules , que comprueba todos los paquetes correspondientes.

Aquí hay un CMakeLists.txt básico que usa pkg-config para encontrar SDL2 con una versión anterior o igual a 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow