Sök…


Syntax

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

parametrar

Parameter detaljer
version (valfritt) Minsta version av paketet definierat av ett huvudnummer och valfritt ett mindre, patch- och tweak-nummer, i formatet major.minor.patch.tweak
EXAKT (valfritt) Ange att den version som anges i version är den exakta versionen som ska hittas
KRAV (valfritt) Kasta automatiskt ett fel och stoppa processen om paketet inte hittas
Tyst (valfritt) Funktionen skickar inte något meddelande till standardutgången

Anmärkningar

  • find_package sättet är kompatibelt på alla plattformar, medan pkg-config är tillgängligt på Unix-liknande plattformar, som Linux och OSX.

  • En fullständig beskrivning av de många parametrarna och alternativen för find_package finns i handboken .

  • Även om det är möjligt att specificera många valfria parametrar som paketversionen, använder inte alla Find-moduler alla dessa parametrar korrekt. Om något odefinierat beteende inträffar kan det vara nödvändigt att hitta modulen i CMakes installationsväg och fixa eller förstå dess beteende.

Använd find_package och Find .cmake-moduler

Standard sättet att hitta installerade paket med CMake är att använda funktionen find_package tillsammans med en Find<package>.cmake fil. Syftet med filen är att definiera sökreglerna för paketet och ställa in olika variabler, till exempel <package>_FOUND , <package>_INCLUDE_DIRS och <package>_LIBRARIES .

Många Find<package>.cmake filer är redan definierade som standard i CMake. Men om det inte finns någon fil för det paket du behöver kan du alltid skriva din egen och lägga den i ${CMAKE_SOURCE_DIR}/cmake/modules (eller någon annan katalog om CMAKE_MODULE_PATH åsidosattes)

En lista över standardmoduler finns i handboken (v3.6) . Det är viktigt att kontrollera manualen enligt den version av CMake som används i projektet, annars kan det saknas moduler. Det är också möjligt att hitta de installerade modulerna med cmake --help-module-list .

Det finns ett fint exempel på en FindSDL2.cmakeGithub

Här är en grundläggande CMakeLists.txt som kräver 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})

Använd pkg_search_module och pkg_check_modules

På Unix-liknande operativsystem är det möjligt att använda pkg-config programmet för att hitta och konfigurera paket som tillhandahåller en <package>.pc fil.

För att använda pkg-config är det nödvändigt att ringa include(FindPkgConfig) i ett CMakeLists.txt . Sedan finns det två möjliga funktioner:

  • pkg_search_module , som söker efter paketet och använder det första tillgängliga.
  • pkg_check_modules , som kontrollerar för alla motsvarande paket.

Här är en grundläggande CMakeLists.txt som använder pkg-config att hitta SDL2 med version ovan eller lika med 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow