cmake find_package指定路径

Ger*_*rry 13 c++ linker opencv cmake shared-libraries

我的机器上安装了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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,使用版本3.4.如何在CMakeLists.txt中指定使用知道其安装位置的其他版本(3.1)?我试过了:

find_package(OpenCV 3.0 REQUIRED PATH /usr/local/opencv3.1)
Run Code Online (Sandbox Code Playgroud)

哪个返回错误:

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

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

什么也没做.它仍然找到版本3.4.我会感激任何帮助.谢谢.

api*_*i55 15

find_package文档中,您可以设置一个PATHS缺少S的搜索路径...也可以执行以下操作:

find_package (<package> PATHS paths... NO_DEFAULT_PATH)
find_package (<package>)
Run Code Online (Sandbox Code Playgroud)

它将检查您首先编写的路径,如果找到该路径,则将其设置为true,然后跳过第二条指令。

另外,您可以使用该EXACT选项来匹配特定的版本,以防由于新版本而试图选择3.4。

find_package(OpenCV 3.1 EXACT REQUIRED PATHS /usr/local/opencv3.1)
Run Code Online (Sandbox Code Playgroud)

我希望这会有所帮助,如果不能,请发表评论

  • 它对我有用,如果我在 find_package(SDL2 REQUIRED) 之前设置 ```set(SDL2_DIR /usr/local/lib/cmake/SDL2)``` (3认同)