web-dev-qa-db-fra.com

cmake find_package spécifie le chemin

J'ai 2 versions d'OpenCV installées sur ma machine. L'un est dans /usr/local/opencv3.1. Je suppose que l’emplacement d’installation de l’autre version (version 3.4) est /usr/local. Quoi qu'il en soit, find_package(OpenCV 3.0 REQUIRED) définit OpenCV_DIR:PATH=/usr/local/share/OpenCV. Ce dossier contient:

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

Dans ce cas, la version 3.4 est utilisée. Comment puis-je spécifier dans CMakeLists.txt d'utiliser l'autre version (3.1) en connaissant son emplacement d'installation? J'ai essayé:

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

Ce qui retourne une erreur:

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

et

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

Ce qui ne fait rien. Il trouve toujours la version 3.4. Je serais reconnaissant pour toute aide. Merci.

13
Gerry

Dans le documentation de find_package vous avez que vous pouvez définir un chemin à rechercher avec PATHS il vous manquait le S ... vous pouvez aussi faire quelque chose comme:

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

Ce qui vérifiera le chemin que vous avez écrit en premier, s'il est trouvé, il sera trouvé comme étant vrai et la deuxième instruction sera ignorée.

En outre, vous pouvez utiliser l'option EXACT pour faire correspondre une version spécifique, au cas où elle essaie de sélectionner la version 3.4 car elle est une version plus récente.

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

J'espère que cela aide, sinon écrire un commentaire

13
api55