cmake
Wyszukaj i używaj zainstalowanych pakietów, bibliotek i programów
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óbpkg-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})