找不到加载文件 OpenCVModules.cmake

could not find load file OpenCVModules.cmake

我是第一次这样做,但无法使用 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)

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

更新1: 如果我通过对路径进行硬编码来修改第 49 行,它就可以工作!

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

由于某些原因,${CMAKE_CURRENT_LIST_DIR} 没有得到适当的设置。 这看起来像动态更改的变量。为什么这没有按预期设置?

OpenCV 2.4.9 中没有对 2.8.3 之前的 CMake 版本的正确支持。特别是,这意味着 CMAKE_CURRENT_LIST_DIR 不是生成的 OpenCVConfig.cmake 中定义的变量。这会导致 OpenCVModules.cmake 的路径格式不正确。至少关于 OpenCVConfig.cmake 中的这条有问题的行,直到 2.4.11 才添加对旧版本 CMake 的兼容性(我通过查看 OpenCV's github 上的 ./cmake/templates/OpenCVConfig.cmake.in 检查了这一点)。

也就是说,如果您可以选择使用什么版本的 CMake 和 OpenCV,那么我建议使用最新版本的 CMake (>=2.8.12) 和最新版本的 OpenCV 2.4 (2.4.13.1) ) 或 OpenCV 3.1.