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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow