cmake
Busca y utiliza paquetes instalados, bibliotecas y programas.
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_packagees compatible en todas las plataformas, mientras quepkg-configsolo está disponible en plataformas similares a Unix, como Linux y OSX.Una descripción completa de los numerosos parámetros y opciones de
find_packagese 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})