Próbuję uzyskać system kompilacji na różnych platformach działający przy użyciu CMake. Teraz oprogramowanie ma kilka zależności. Sam je skompilowałem i zainstalowałem w swoim systemie.
Przykładowe pliki, które zostały zainstalowane:
-- Installing: /usr/local/share/SomeLib/SomeDir/somefile
-- Installing: /usr/local/share/SomeLib/SomeDir/someotherfile
-- Installing: /usr/local/lib/SomeLib/somesharedlibrary
-- Installing: /usr/local/lib/SomeLib/cmake/FindSomeLib.cmake
-- Installing: /usr/local/lib/SomeLib/cmake/HelperFile.cmake
Teraz CMake ma, find_package()
który otwiera Find*.cmake
plik i wyszukuje bibliotekę w systemie i definiuje niektóre zmienne, takie jak SomeLib_FOUND
itp.
Mój CMakeLists.txt zawiera coś takiego:
set(CMAKE_MODULE_PATH "/usr/local/lib/SomeLib/cmake/;${CMAKE_MODULE_PATH}")
find_package(SomeLib REQUIRED)
Pierwsze polecenie określa, gdzie CMake wyszukuje po Find*.cmake
i dodałem katalog, w SomeLib
którym FindSomeLib.cmake
można znaleźć, więc find_package()
działa zgodnie z oczekiwaniami.
Ale jest to trochę dziwne, ponieważ jednym z powodów, dla których find_package()
istnieje, jest ucieczka od niekrzyżowych ścieżek zakodowanych na sztywno.
Jak to się zwykle robi? Czy powinienem skopiować cmake/
katalog SomeLib
do mojego projektu i ustawić CMAKE_MODULE_PATH
relatywnie?