【问题标题】:cmake find_package specify pathcmake find_package 指定路径
【发布时间】:2018-09-23 18:24:18
【问题描述】:

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

返回错误:

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。我会很感激任何帮助。谢谢。

【问题讨论】:

    标签: c++ opencv cmake linker shared-libraries


    【解决方案1】:

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

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

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

    此外,您可以使用EXACT 选项来匹配特定版本,以防它由于是较新版本而尝试选择 3.4。

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

    希望对你有帮助,如果没有,请写评论

    【讨论】:

    • find_package(OpenCV 3.1 EXACT REQUIRED PATHS /usr/local/opencv3.1) 在我的情况下有效。谢谢。
    • 我刚刚对此进行了测试,但仍然无法正常工作,直到我评论了第二行(即,仅在只有具有指定路径的选项时才有效)
    • @Bersan 文档说要多次使用它...通常我只使用第一个但没有NO_DEFAULT_PATH 当我需要特定路径中的一个库时,通常它工作得很好... . 但是我将它用于未安装在我的系统中但刚刚编译的库....
    • 如果我在 find_package(SDL2 REQUIRED) 之前设置set(SDL2_DIR /usr/local/lib/cmake/SDL2),它对我有用
    猜你喜欢
    • 1970-01-01
    • 2021-10-02
    • 2012-04-14
    • 2018-11-18
    • 2019-07-30
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 2019-12-20
    相关资源
    最近更新 更多