3

我第一次这样做,但无法使用 CMake find_package(OpenCV)

OpenCVModules.cmake 与 OpenCVConfig.cmake 位于同一文件夹中,但由于某些原因,CMake 配置失败并出现此错误。

我在 Windows 上使用 Visual Studio Express 2010、CMake v2.8.0 和 OpenCV v2.4.9

CMake Error at D:/opencv/mybuild/install/x86/vc10/lib/OpenCVConfig.cmake:49 (include):
  include could not find load file:

    /OpenCVModules.cmake
Call Stack (most recent call first):
  CMakeLists.txt:19 (FIND_PACKAGE)

我必须使用 VS 2010 Express 来解决这个问题,但我可以为这个项目选择任何兼容的 CMake 和 OpenCV 版本。

我在 CMakeLists.txt 中执行此操作,并且“OpenCVConfig.cmake”是 OpenCV 附带的默认设置。我没有修改它。

SET(OpenCV_DIR "D:/opencv/mybuild")
# this project requires OpenCV, so find it
FIND_PACKAGE( OpenCV )
INCLUDE_DIRECTORIES( ${OpenCV_INCLUDE_DIRS} )

OpenCVConfig.cmake 中的第 49 行看起来像这样

  include(${CMAKE_CURRENT_LIST_DIR}/OpenCVModules${OpenCV_MODULES_SUFFIX}.cmake)

非常感谢您在正确方向上的任何帮助。谢谢。

UPDATE1: 如果我通过硬编码路径来修改第 49 行,它可以工作!

include(D:/opencv/mybuild/OpenCVModules${OpenCV_MODULES_SUFFIX}.cmake)

由于某些原因 ${CMAKE_CURRENT_LIST_DIR} 未正确设置。这看起来像动态变化的变量。为什么这没有按预期设置?

4

1 回答 1

2

OpenCV 2.4.9 中不存在对 2.8.3 之前的 CMake 版本的适当支持。特别是,这意味着 CMAKE_CURRENT_LIST_DIR 不是生成的 OpenCVConfig.cmake 中定义的变量。这会导致 OpenCVModules.cmake 的路径形成错误。至少关于 OpenCVConfig.cmake 中的这条违规行,直到 2.4.11 才添加对旧版本 CMake 的兼容性(我通过查看OpenCV 的 github./cmake/templates/OpenCVConfig.cmake.in进行了检查)。

话虽如此,如果您可以选择使用什么版本的 CMake 和 OpenCV,那么我建议使用最新版本的 CMake (>=2.8.12) 和最新版本的 OpenCV 2.4 (2.4.13.1) 或 OpenCV 3.1。

于 2016-09-28T02:45:41.877 回答