cmake find_package указать путь

У меня на компьютере установлено 2 версии OpenCV. Один в /usr/local/opencv3.1, Я предполагаю, что место установки другого (версия 3.4) /usr/local, Тем не мение, find_package(OpenCV 3.0 REQUIRED) наборы OpenCV_DIR:PATH=/usr/local/share/OpenCV, Эта папка содержит:

haarcascades  OpenCVConfig.cmake          OpenCVModules-release.cmake
java          OpenCVConfig-version.cmake  valgrind_3rdparty.supp
lbpcascades   OpenCVModules.cmake         valgrind.supp

В этом случае используется версия 3.4. Как я могу указать в CMakeLists.txt использовать другую версию (3.1), зная ее место установки? Я пробовал:

find_package(OpenCV 3.0 REQUIRED PATH /usr/local/opencv3.1)

Который возвращает ошибку:

Could NOT find OpenCV (missing: PATH /usr/local/opencv3.1) (found suitable version "3.4.1", minimum required is "3.0")

а также

set(OpenCV_DIR /usr/local/opencv3.1/OpenCV/*) # also tried OpenCV_ROOT_DIR, OPENCV_ROOT_DIR
find_package(OpenCV 3.0 REQUIRED)

Который ничего не делает. Он все еще находит версию 3.4. Буду благодарен за любую помощь. Спасибо.

1 ответ

Решение

В документации по find_package вы можете указать путь для поиска PATHS Вы скучали по S... также вы можете сделать что-то вроде:

find_package (<package> PATHS paths... NO_DEFAULT_PATH)
find_package (<package>)

Который проверит путь, который вы написали первым, если он найден, он установит для параметра true значение, и вторая инструкция будет пропущена.

Также вы можете использовать EXACT опция, соответствующая конкретной версии, в случае, если она пытается выбрать 3.4 из-за более новой версии.

find_package(OpenCV 3.1 EXACT REQUIRED PATHS /usr/local/opencv3.1)

Надеюсь, это поможет, если нет, напишите комментарий

Другие вопросы по тегам