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_package
es compatible en todas las plataformas, mientras quepkg-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})