cmake
Cerca e usa pacchetti, librerie e programmi installati
Ricerca…
Sintassi
- find_package (pkgname [versione] [EXACT] [QUIET] [REQUIRED])
- includere (FindPkgConfig)
- pkg_search_module (prefisso [REQUIRED] [QUIET] pkgname [otherpkg ...])
- pkg_check_modules (prefisso [REQUIRED] [QUIET] pkgname [otherpkg ...])
Parametri
Parametro | Dettagli |
---|---|
versione (opzionale) | Versione minima del pacchetto definita da un numero maggiore e facoltativamente un numero minore, di patch e di tweak, nel formato major.minor.patch.tweak |
ESATTO (facoltativo) | Specificare che la versione specificata nella version è la versione esatta da trovare |
RICHIESTO (facoltativo) | Genera automaticamente un errore e interrompe il processo se il pacchetto non viene trovato |
QUIET (opzionale) | La funzione non invierà alcun messaggio all'output standard |
Osservazioni
Il metodo
find_package
è compatibile su tutte le piattaforme, mentre la modalitàpkg-config
è disponibile solo su piattaforme tipo Unix, come Linux e OSX.Una descrizione completa del
find_package
numerosi parametri e opzioni nel manuale .Anche se è possibile specificare molti parametri facoltativi come la versione del pacchetto, non tutti i moduli di ricerca utilizzano correttamente tutti quei parametri. Se si verifica un comportamento non definito, potrebbe essere necessario trovare il modulo nel percorso di installazione di CMake e correggere o comprendere il suo comportamento.
Usa find_package e Trova Moduli .cmake
Il modo predefinito per trovare i pacchetti installati con CMake è utilizzare la funzione find_package
insieme a un file Find<package>.cmake
. Lo scopo del file è definire le regole di ricerca per il pacchetto e impostare variabili diverse, come <package>_FOUND
, <package>_INCLUDE_DIRS
e <package>_LIBRARIES
.
Molti file Find<package>.cmake
sono già definiti per impostazione predefinita in CMake. Tuttavia, se non è presente alcun file per il pacchetto necessario, puoi sempre scrivere il tuo e inserirlo in ${CMAKE_SOURCE_DIR}/cmake/modules
(o qualsiasi altra directory se CMAKE_MODULE_PATH
stato sovrascritto)
Un elenco di moduli predefiniti è disponibile nel manuale (v3.6) . È essenziale controllare il manuale in base alla versione di CMake utilizzata nel progetto, altrimenti potrebbero mancare moduli. È anche possibile trovare i moduli installati con cmake --help-module-list
.
C'è un bell'esempio per FindSDL2.cmake
su Github
Ecco un CMakeLists.txt
base che richiede 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})
Usa pkg_search_module e pkg_check_modules
Sui sistemi operativi Unix-like, è possibile utilizzare il programma pkg-config
per trovare e configurare i pacchetti che forniscono un file <package>.pc
.
Per poter utilizzare pkg-config
, è necessario chiamare include(FindPkgConfig)
in un CMakeLists.txt
. Quindi, ci sono 2 possibili funzioni:
-
pkg_search_module
, che controlla il pacchetto e utilizza il primo disponibile. -
pkg_check_modules
, che controlla tutti i pacchetti corrispondenti.
Ecco un CMakeLists.txt
base che utilizza pkg-config
per trovare SDL2 con versione precedente o uguale 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})