Я намагаюся зрозуміти, як cmake знаходить пакети, використовуючи FindXXX.cmake
файл Як приклад, в бібліотеці OpenNI є файл FindOpenNI.cmake
визначено тут: https://github.com/PointCloudLibrary/pcl/blob/master/cmake/Modules/FindOpenNI.cmake
Тепер у нижній частині цього файлу є наступне:
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)
Те, що я не розумію, це місце змінної OPENNI_FOUND
визначається, оскільки це перша точка файла, про яку вона згадується.
Я б подумав, що саме цей файл використовується для пошуку OpenNI шляхом пошуку в каталогах, як це продиктовано вмістом файлу. Однак, здається, що OPENNI_FOUND
повинен бути оголошений раніше. Тому це мені плутає: FindOpenNI.cmake
використовується для пошуку OpenNI, але під час цього процесу йому дано змінну OPENNI_FOUND
, який сам розповідає cmake, чи знайдено OpenNI.
Отже, як насправді знайти OpenNI? Використовуючи цей файл? Або інший спосіб?
Дякую :)
Відповіді:
0 для відповіді № 1Так, CMake використовує файл, який ви згадали, щоб знайти OpenNI. The OPENNI_FOUND
змінна встановлена find_package_handle_standard_args()
функція Тут відбувається вся магія, див документація для цього.