Found OpenCV Windows Pack but it has no binaries compatible with your configuration.
CMakeLists中:
find_package(OpenCV REQUIRED) 报错,错误如下
-
cmake变量:
cmake有两种变量:normal
和cache
normal
就是我们普通使用的变量,比如set(VAR "xyz")
cache
是cmake缓存的变量,比如cmake -D
定义的变量,通常这些变量会存在CMakeCache.txt
里面 -
find_package(OpenCV REQUIRED) 寻找包有两种模式 1. Module 2. Config
- Module
CMake searches for a file calledFind<PackageName>.cmake
in the CMAKE_MODULE_PATH,
CMAKE_MODULE_PATH: By default it is empty, it is intended to be set by the project. 默认情况下是空的,在项目中是set自己指定的 - Config
到下列文件夹中去寻找<PackageName>Config.cmake
or<lower-case-package-name>-config.cmake
而 prefix 主要指的是以下几个重要的默认查找目录,优先级由高到低<prefix>/ (W) <prefix>/(cmake|CMake)/ (W) <prefix>/<name>*/ (W) <prefix>/<name>*/(cmake|CMake)/ (W)
<PackageName>_ROOT / <package>_DIR CMAKE_PREFIX_PATH CMAKE_FRAMEWORK_PATH CMAKE_APPBUNDLE_PATH PATH
<package>_Root
名为_ROOT的cmake变量或环境变量, 如果定义了_DIR cmake变量,那么_ROOT不起作用
CMAKE_PREFIX_PATH
CMAKE_FRAMEWORK_PATH
CMAKE_APPBUNDLE_PATH
cmake 缓存变量, 默认为空,通过
cmake -CMAKE_PREFIX_PATH=Your Path
设置
<PackageName>_DIR
CMAKE_PREFIX_PATH
CMAKE_FRAMEWORK_PATH
CMAKE_APPBUNDLE_PATH
环境变量
PATH
环境变量
报错明显指出,找到了OpenCVConfig.cmake文件,但是没有找到二进制库,需要手动设置 OpenCV_DIR;
看到报错指出 OpenCV_FOUND 被设为了 false,同时也输出了如下信息:
打开OpenCVConfig.cmake文件,找到 Set OpenCV_FOUND FALSE的分支,发现果然是 OpenCV_LIB_PATH 出了问题
if(OpenCV_LIB_PATH AND EXISTS "${OpenCV_LIB_PATH}/OpenCVConfig.cmake")
...
else
set(OpenCV_FOUND FALSE)
找到设置 OpenCV_LIB_PATH 的函数,发现 OpenCV_LIB_PATH 的设置与 OpenCV_ARCH 和 OpenCV_RUNTIME 两个变量有关,前者被正确设置,而后者没有被正确设置
打印 MSVC_VERSION,打印结果为1928,没有匹配的分支,至此定位到问题的原因