【问题标题】:Compiling using cmake with dependencies installed using macport使用 cmake 编译并使用 macport 安装依赖项
【发布时间】:2012-10-07 23:43:04
【问题描述】:

我正在尝试构建依赖于 OpenCV 的项目。我使用 macports 安装了 Opencv,当我尝试构建项目时,cmake 给出以下输出:

CMake Error at CMakeLists.txt:47 (FIND_PACKAGE):
  By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "OpenCV", but
  CMake did not find one.

  Could not find a package configuration file provided by "OpenCV" with any
  of the following names:

    OpenCVConfig.cmake
    opencv-config.cmake

  Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set
  "OpenCV_DIR" to a directory containing one of the above files.  If "OpenCV"
  provides a separate development package or SDK, be sure it has been
  installed.

我对此问题进行了一些搜索并添加了以下环境。我的$HOME/.profile 文件中的变量

export DYLD_LIBRARY_PATH=/opt/local/lib:$DYLD_LIBRARY_PATH
export CMAKE_PREFIX_PATH=/opt/local

没有成功。我检查了一下,所有 opencv 文件都安装在 /opt/local/lib 和 /opt/local/include/opencv 目录中。以下路径中还有OpenCVConfig.cmake

/opt/local/lib/cmake/OpenCVConfig.cmake

如何让cmake知道opencv的安装路径?以前我使用 cmake 自己构建 OpenCV 并安装到 /usr/local 中,然后它工作正常,没有任何其他修复。但是我在使用 ffmpeg 时遇到了一些问题,现在我转而使用 macports。

【问题讨论】:

    标签: opencv compilation cmake


    【解决方案1】:

    ma​​cports 传统上将 OpenCV 安装到 /opt/local/,而不是标准的 /usr/local/

    您的问题的解决方案如下:

    将“OpenCV”的安装前缀添加到CMAKE_PREFIX_PATH或设置 “OpenCV_DIR”到包含上述文件之一的目录。

    在命令行中构建项目时,请确保执行:

    export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/local/lib/pkgconfig
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/local/lib
    

    然后为cmake设置标志CMAKE_PREFIX_PATH

    cmake -D CMAKE_PREFIX_PATH=/opt/local ../
    

    【讨论】:

    • 很抱歉,但我通常是这样解决这类问题的。
    【解决方案2】:

    另一个对我有用的选项是在 cmake opencv 目录中设置 env 值 OpenCV_DIR:

    export OpenCV_DIR=/opt/local/lib/cmake/
    

    【讨论】:

      【解决方案3】:

      不是 MACPORT 问题,但有人可能会觉得这很有帮助。在this question 中关注@hugh-pearse 和@leszek-hanusz 的答案,稍作调整。我已经从 ubuntu 12.10 存储库 (libopencv-)* 安装了 opencv,并且遇到了同样的问题。无法用export OpenCV_DIR=/usr/share/OpenCV/ 解决它(因为我的 OpenCVConfig.cmake 在那里)。当我更改 OpenCVConfig.cmake 文件上的一些行时,它就解决了:

      # ======================================================
      # Include directories to add to the user project:
      # ======================================================
      
      # Provide the include directories to the caller
      
      #SET(OpenCV_INCLUDE_DIRS "${OpenCV_INSTALL_PATH}/include/opencv;${OpenCV_INSTALL_PATH}/include")
      
      SET(OpenCV_INCLUDE_DIRS "/usr/include/opencv;/usr/include/opencv2")
      INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
      
      # ======================================================
      # Link directories to add to the user project:
      # ======================================================
      
      # Provide the libs directory anyway, it may be needed in some cases.
      
      #SET(OpenCV_LIB_DIR "${OpenCV_INSTALL_PATH}/lib")
      
      SET(OpenCV_LIB_DIR "/usr/lib")
      
      LINK_DIRECTORIES(${OpenCV_LIB_DIR})
      

      这适用于我的 Ubuntu 12.10。记得在你的 CMakeLists.txt 中添加target_link_libraries(yourprojectname ${OpenCV_LIBS})

      【讨论】:

        【解决方案4】:

        我终于读到了 OpenCVConfig.cmake 文件的标题。 它指示包含这些行以从外部项目中使用:

        find_package(OpenCV REQUIRED)
        include_directories(${OpenCV_INCLUDE_DIRS})
        target_link_libraries(MY_TARGET_NAME ${OpenCV_LIBS})
        

        (将 include_directories 添加到 CMakeLists.txt 已为我修复)

        【讨论】:

          【解决方案5】:

          我尝试了以上所有想法都徒劳无功。 我最终找到了编译工作的方法:除了使用@kengregson 步骤之外,我只是重命名了文件夹 /usr/local/include/opencv2 以便在编译我的 cpp 文件时不会选择它。

          【讨论】:

            【解决方案6】:

            由于我在多用户服务器中编译自己的 OpenCV,所以我不能直接在 /usr/local 中安装 OpenCV 库,而是在我的主文件夹中,然后我会遇到完全相同的问题。

            以下是我的修复方法:

            1. 流程OpenCV official doc: Using OpenCV with gcc and CMake中的步骤

            2. 添加displayImage测试程序,并使用这个CMake文件

            cmake_minimum_required(VERSION 2.8) project( DisplayImage ) find_package( OpenCV) add_executable( DisplayImage DisplayImage.cpp ) target_link_libraries( DisplayImage ${OpenCV_LIBS} )

            1. 同样的错误发生了,所以在我的.tcshrc中添加一个环境变量

            setenv OpenCV_DIR "${folder where contains OpenCVConfig.cmake }" \# mine is: setenv OpenCV_DIR "~/local/OpenCV2.4.13/share/OpenCV"

            【讨论】:

              【解决方案7】:

              确保你已经编译过OpenCV,编译后会在build目录下生成OpenCVConfig.cmake。

              按照these步骤编译

              那么,export OpenCV_DIR=<path to build directory with OpenCVConfig.cmake>

              现在应该可以工作了!

              【讨论】:

                猜你喜欢
                • 2021-11-18
                • 2015-03-26
                • 2014-12-31
                • 1970-01-01
                • 2023-04-03
                • 2016-02-18
                • 2019-04-29
                • 1970-01-01
                • 2022-12-10
                相关资源
                最近更新 更多