cmake find_package 指定路径

cmake find_package specify path

我的机器上安装了 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)

其中returns一个错误:

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。如果有任何帮助,我将不胜感激。谢谢。

find_package documentation 中,您可以使用 PATHS 设置要搜索的路径,您缺少 S... 您也可以执行以下操作:

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

这将检查您首先写入的路径,如果找到,它将 found 设置为 true,第二条指令将被跳过。

此外,您可以使用 EXACT 选项来匹配特定版本,以防它尝试 select 3.4 因为它是较新的版本。

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

希望对您有所帮助,如果没有,请发表评论