web-dev-qa-db-ja.com

cmake find_packageはパスを指定します

マシンにOpenCVの2つのバージョンがインストールされています。 1つは_/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が使用されます。インストール場所を知っている他のバージョン(3.1)を使用するようにCMakeLists.txtで指定するにはどうすればよいですか?私はもう試した:

_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が見つかります。どんな助けにも感謝します。ありがとうございました。

13
Gerry

find_package documentation では、Sが欠落していたPATHSで検索するパスを設定できることがあります...また、次のようなこともできます。

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

最初に記述したパスをチェックし、見つかった場合はfoundをtrueに設定し、2番目の命令はスキップされます。

また、新しいバージョンであるために3.4を選択しようとする場合、EXACTオプションを使用して特定のバージョンに一致させることができます。

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

これがコメントを書くのに役立つことを願っています

13
api55