Próbuję zrozumieć, w jaki sposób cmake znajduje pakiety, używając FindXXX.cmake
plik. Na przykład biblioteka OpenNI ma plik FindOpenNI.cmake
zdefiniowane tutaj: https://github.com/PointCloudLibrary/pcl/blob/master/cmake/Modules/FindOpenNI.cmake
Teraz na dole tego pliku znajduje się:
if(OPENNI_FOUND)
# Add the include directories
set(OPENNI_INCLUDE_DIRS ${OPENNI_INCLUDE_DIR})
message(STATUS "OpenNI found (include: ${OPENNI_INCLUDE_DIRS}, lib: ${OPENNI_LIBRARY})")
endif(OPENNI_FOUND)
Nie rozumiem, gdzie jest zmienna OPENNI_FOUND
jest zdefiniowany, ponieważ jest to pierwszy punkt w wymienionym pliku.
Myślałem, że sam ten plik służy do wyszukiwania OpenNI, przeszukując katalogi zgodnie z zawartością pliku. Wydaje się jednak, że OPENNI_FOUND
musiał zostać wcześniej zadeklarowany. Dlatego jest dla mnie mylące: FindOpenNI.cmake
jest używany do znalezienia OpenNI, ale podczas tego procesu nadano mu zmienną OPENNI_FOUND
, który sam informuje cmake, czy znaleziono OpenNI.
Jak więc cmake faktycznie znajduje OpenNI? Używasz tego pliku? Lub w inny sposób?
Dzięki :)
Odpowiedzi:
0 dla odpowiedzi № 1Tak, CMake używa wspomnianego pliku do znalezienia OpenNI. The OPENNI_FOUND
zmienna jest ustawiana przez find_package_handle_standard_args()
funkcjonować. To tam cała magia jest zrobiona, patrz dokumentacja do tego.