Нет эффекта CMAKE_MODULE_PATH

Cmake не видит OpenCVConfig.cmake. Установил list(APPEND CMAKE_MODULE_PATH "$ENV{HOME}/CLionProjects/opencv/opencv-android-shared/sdk/native/jni"). Файл присутствует

директория OpenCVConfig.cmake

Хочу использовать OpenCV в приложении QT под андроид. Qt, OpenCV, текущий проект собираются с использованием одного и того же toolchain ../Android/Sdk/ndk/android-ndk-r21e/build/cmake/android.toolchain.cmake. Так же ANDROID_PLATFORM=28 ANDROID_ABI=arm64-v8a. В CMakeLists.txt текущего проекта:

list(APPEND CMAKE_MODULE_PATH
        "$ENV{HOME}/CLionProjects/opencv/opencv-android-shared/sdk/native/jni")
list(APPEND CMAKE_PREFIX_PATH
        ...
        "$ENV{HOME}/CLionProjects/opencv/opencv-android-shared/sdk/native/jni")

Ошибка Cmake:

  By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "OpenCV", but
  CMake did not find one.

  Could not find a package configuration file provided by "OpenCV" with any
  of the following names:

    OpenCVConfig.cmake
    opencv-config.cmake

  Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set
  "OpenCV_DIR" to a directory containing one of the above files.  If "OpenCV"
  provides a separate development package or SDK, be sure it has been
  installed.

Подозреваю Cmake ищет определенную версию/платформу OpenCV, но настройки сборки аналогичные.


Ответы (1 шт):

Автор решения: Tsyvarev

Переменная CMAKE_MODULE_PATH используется только для поиска "Find" скриптов.

Для поиска "Config" скриптов используется переменная CMAKE_PREFIX_PATH или XXX_DIR.

Это различие переменных можно выявить, прочитав внимательнее сообщение об ошибке:

By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH

Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH

set "OpenCV_DIR" to a directory containing one of the above files.

В последней фразе имеются ввиду именно файлы OpenCVConfig.cmake и opencv-config.cmake.

Различие использования переменных CMAKE_PREFIX_PATH и XXX_DIR в том, что переменная XXX_DIR задаёт путь к "Config" файлу только одного пакета, а переменная CMAKE_PREFIX_PATH может указывать на директорию, куда установленно сразу несколько пакетов.

Между прочим, обе эти переменные - CMAKE_PREFIX_PATH и XXX_DIR - можно задавать в окружении (environment). Тогда их не надо передавать через параметры cmake или устанавливать внутри CMakeLists.txt (последнее вообще не рекомедуется).

(А вот задание переменной CMAKE_MODULE_PATH внутри CMakeLists.txt - единственный рекомендованный вариант).

→ Ссылка