Szukaj…


Składnia

  • find_package (pkgname [wersja] [DOKŁADNE] [CICHE] [WYMAGANE])
  • obejmują (FindPkgConfig)
  • pkg_search_module (prefiks [WYMAGANE] [QUIET] pkgname [otherpkg ...])
  • pkg_check_modules (prefiks [WYMAGANE] [CICHY] pkgname [otherpkg ...])

Parametry

Parametr Detale
wersja (opcjonalnie) Minimalna wersja pakietu zdefiniowana przez numer główny i opcjonalnie numer podrzędny, numer poprawki i poprawki, w formacie major.minor.patch.tweak
DOKŁADNE (opcjonalnie) Określ, że wersja określona w version jest tą, którą można znaleźć
WYMAGANE (opcjonalnie) Automatycznie zgłasza błąd i zatrzymuje proces, jeśli pakiet nie zostanie znaleziony
CICHY (opcjonalnie) Funkcja nie wyśle żadnego komunikatu na standardowe wyjście

Uwagi

  • Sposób find_package jest kompatybilny na wszystkich platformach, podczas gdy sposób pkg-config jest dostępny tylko na platformach uniksowych, takich jak Linux i OSX.

  • Pełny opis licznych parametrów i opcji find_package można znaleźć w instrukcji .

  • Chociaż możliwe jest określenie wielu opcjonalnych parametrów, takich jak wersja pakietu, nie wszystkie moduły Find poprawnie używają wszystkich tych parametrów. Jeśli wystąpi jakieś nieokreślone zachowanie, może być konieczne znalezienie modułu na ścieżce instalacyjnej CMake i naprawienie lub zrozumienie jego zachowania.

Użyj find_package i Find Moduły .cmake

Domyślnym sposobem znajdowania zainstalowanych pakietów za pomocą CMake jest użycie funkcji find_package w połączeniu z plikiem Find<package>.cmake . Celem pliku jest zdefiniowanie reguł wyszukiwania dla pakietu i ustawienie różnych zmiennych, takich jak <package>_FOUND , <package>_INCLUDE_DIRS i <package>_LIBRARIES .

Wiele plików Find<package>.cmake jest już domyślnie zdefiniowanych w CMake. Jeśli jednak nie potrzebujesz pliku dla potrzebnej paczki, zawsze możesz napisać własny plik i umieścić go w ${CMAKE_SOURCE_DIR}/cmake/modules (lub w innym katalogu, jeśli CMAKE_MODULE_PATH został przesłonięty)

Listę domyślnych modułów można znaleźć w instrukcji (v3.6) . Konieczne jest sprawdzenie instrukcji zgodnie z wersją CMake zastosowaną w projekcie, w przeciwnym razie mogą brakować modułów. Można również znaleźć zainstalowane moduły za pomocą cmake --help-module-list .

Jest ładny przykład FindSDL2.cmake na Github

Oto podstawowe CMakeLists.txt że wymagałoby 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})

Użyj modułów pkg_search_module i pkg_check_modules

W systemach operacyjnych typu Unix można użyć programu pkg-config do znalezienia i skonfigurowania pakietów, które zawierają plik <package>.pc .

Aby użyć pkg-config , należy wywołać include(FindPkgConfig) w pliku CMakeLists.txt . Następnie są 2 możliwe funkcje:

  • pkg_search_module , który sprawdza pakiet i korzysta z pierwszego dostępnego.
  • pkg_check_modules , które sprawdzają wszystkie odpowiednie pakiety.

Oto podstawowy plik CMakeLists.txt który używa pkg-config do znalezienia SDL2 w wersji wyższej lub równej 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow