Zoeken…


Syntaxis

  • find_package (pkgname [version] [EXACT] [QUIET] [REQUIRED])
  • omvatten (FindPkgConfig)
  • pkg_search_module (voorvoegsel [REQUIRED] [QUIET] pkgname [otherpkg ...])
  • pkg_check_modules (voorvoegsel [REQUIRED] [QUIET] pkgname [otherpkg ...])

parameters

Parameter Details
versie (optioneel) Minimale versie van het pakket gedefinieerd door een hoofdnummer en optioneel een ondergeschikt, patch- en tweaknummer, in de indeling major.minor.patch.tweak
EXACT (optioneel) Geef op dat de versie die is opgegeven in de version de exacte versie is die moet worden gevonden
VERPLICHT (optioneel) Hiermee wordt automatisch een fout gegenereerd en wordt het proces gestopt als het pakket niet wordt gevonden
STIL (optioneel) De functie verzendt geen berichten naar de standaarduitvoer

Opmerkingen

  • De manier van find_package is compatibel op elk platform, terwijl de manier van pkg-config alleen beschikbaar is op Unix-achtige platforms, zoals Linux en OSX.

  • Een volledige beschrijving van het find_package talloze parameters en opties zijn te vinden in de handleiding .

  • Hoewel het mogelijk is om veel optionele parameters op te geven, zoals de versie van het pakket, gebruiken niet alle Find-modules al die parameters correct. Als er ongedefinieerd gedrag optreedt, kan het nodig zijn om de module in het installatiepad van CMake te vinden en het gedrag te corrigeren of te begrijpen.

Gebruik find_package en Find .cmake modules

De standaardmanier om geïnstalleerde pakketten met find_package te vinden, is de functie find_package te gebruiken in combinatie met een Find<package>.cmake bestand. Het doel van het bestand is om de <package>_FOUND voor het pakket te definiëren en verschillende variabelen in te stellen, zoals <package>_FOUND , <package>_INCLUDE_DIRS en <package>_LIBRARIES .

Veel Find<package>.cmake bestand zijn al standaard gedefinieerd in CMake. Als er echter geen bestand is voor het pakket dat u nodig hebt, kunt u altijd uw eigen schrijven en deze in ${CMAKE_SOURCE_DIR}/cmake/modules (of een andere map als CMAKE_MODULE_PATH werd overschreven)

Een lijst met standaardmodules is te vinden in de handleiding (v3.6) . Het is essentieel om de handleiding te controleren volgens de versie van CMake die in het project wordt gebruikt, anders kunnen er modules ontbreken. Het is ook mogelijk om de geïnstalleerde modules te vinden met cmake --help-module-list .

Er is een mooi voorbeeld voor een FindSDL2.cmake op Github

Hier is een eenvoudige CMakeLists.txt die CMakeLists.txt zou vereisen:

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

Gebruik pkg_search_module en pkg_check_modules

Op Unix-achtige besturingssystemen is het mogelijk om het programma pkg-config te gebruiken om pakketten te vinden en te configureren die een <package>.pc bestand bieden.

Om pkg-config , is het noodzakelijk om include(FindPkgConfig) in een CMakeLists.txt . Dan zijn er 2 mogelijke functies:

  • pkg_search_module , die controleert op het pakket en de eerste beschikbare gebruikt.
  • pkg_check_modules , die alle bijbehorende pakketten controleren.

Hier is een eenvoudige CMakeLists.txt die pkg-config gebruikt om SDL2 te vinden met een versie hoger dan of gelijk aan 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow