Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cmake find_package specify path

I have 2 versions of OpenCV installed on my machine. One is in /usr/local/opencv3.1. I presume the install location of the other one (version 3.4) is /usr/local. Anyway, find_package(OpenCV 3.0 REQUIRED) sets OpenCV_DIR:PATH=/usr/local/share/OpenCV. This folder contains:

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

In this case, version 3.4 is used. How can I specify in CMakeLists.txt to use the other version (3.1) knowing its install location? I've tried:

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

Which returns an error:

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

and

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

Which does nothing. It still finds version 3.4. I'd be grateful for any help. Thank you.

like image 773
Gerry Avatar asked Apr 13 '18 11:04

Gerry


People also ask

How does Find_package work in CMake?

CMake searches for a file called Find<package>. cmake in the CMAKE_MODULE_PATH followed by the CMake installation. If the file is found, it is read and processed by CMake. It is responsible for finding the package, checking the version, and producing any needed messages.

Where does CMake Find_package search?

CMake ships with its own set of built-in find_package scripts, and their location is in the default CMAKE_MODULE_PATH.

How do I change my path in CMake?

CMake will use whatever path the running CMake executable is in. Furthermore, it may get confused if you switch paths between runs without clearing the cache. So what you have to do is simply instead of running cmake <path_to_src> from the command line, run ~/usr/cmake-path/bin/cmake <path_to_src> .

Where is CMake path in Windows?

CMake maintains a list of package information in the Windows registry under HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\ . Packages build from source can register there using the export command. Other projects build later on the same machine will then be able to find that package without additional configuration.


1 Answers

In the find_package documentation you have that you can set a path to be searched with PATHS you were missing the S... also you can do something like:

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

Which will check for the path you wrote first, the if it is found it will set found to true and the second instruction will be skipped.

Also, you can use the EXACT option to match an specific version, in case it tries to select 3.4 due to being a newer version.

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

I hope this helps, if not, write a comment

like image 50
api55 Avatar answered Sep 28 '22 18:09

api55