c++ - cmake 找不到“OPENCV”提供的包配置文件
问题描述
我已经从源代码构建了 OpenCV v4.2 并将其安装到/usr/local
. OPENCVConfig.cmake
文件在/usr/local/lib/cmake/opencv4
目录中:
paul@paul-desktop:/usr/local/lib/cmake/opencv4$ dir
OpenCVConfig.cmake OpenCVConfig-version.cmake OpenCVModules.cmake OpenCVModules-release.cmake
这是我CMakeLists.txt
拼命尝试满足的文件find_package
:
cmake_minimum_required(VERSION 3.16.2)
project(af VERSION 0.1.0 LANGUAGES CXX)
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_BUILD_PARALLEL_LEVEL 4)
set(CMAKE_PREFIX_PATH /usr/local/lib/cmake/opencv4)
set(ENV{OPENCV_DIR} /usr/local/lib/cmake/opencv4)
set(OPENCV_DIR /usr/local/lib/cmake/opencv4)
find_package(OPENCV REQUIRED)
add_executable(af main.cpp)
产生此错误:
[build] CMake Error at CMakeLists.txt:12 (find_package):
[build] By not providing "FindOPENCV.cmake" in CMAKE_MODULE_PATH this project has
[build] asked CMake to find a package configuration file provided by "OPENCV", but
[build] CMake did not find one.
[build]
[build] Could not find a package configuration file provided by "OPENCV" with any
[build] of the following names:
[build]
[build] OPENCVConfig.cmake
[build] opencv-config.cmake
[build]
[build] Add the installation prefix of "OPENCV" to CMAKE_PREFIX_PATH or set
[build] "OPENCV_DIR" to a directory containing one of the above files. If "OPENCV"
[build] provides a separate development package or SDK, be sure it has been
[build] installed.
当我打开CMakeCache.txt
并cmake-gui
手动设置OPENCV_DIR
为 时/usr/local/lib/cmake/opencv4
,我遇到了同样的错误并OPENCV_DIR
变为
OPENCV_DIR-NOTFOUND
.
这里发生了什么?在我看来,我正在满足错误消息中列出的要求以及我可以在类似问题的答案中找到的任何好的建议。
我不确定这是否重要,但/usr/share/OpenCV/OpenCVConfig.cmake
属于不同版本的 OpenCV。
解决方案
包名区分大小写。并且使用的 OpenCV 包的正确名称find_package
是OpenCV
,不是OPENCV
。
实际上,CMake 中唯一不区分大小写的是宏/函数名称。其他所有内容都区分大小写。
一些变量和文件使用名称的大写或小写转换。例如OPENCV_DIR
,变量使用大写的包名,而opencv-config.cmake
文件使用小写的包名。但这并不否认区分大小写的方面。
推荐阅读
- javascript - 如何在 nodeJs 中使用 stream-json 中的管道写入文件?
- tensorflow - TensorFlow 对象检测:继续训练
- python - 我将数据从 csv 加载到 Python Pandas 并尝试将列设置为行(日期重复)
- java - 如何使用代码从 apk 中提取 SHA/MDA?
- python - 如何将标签添加到子图行和列?
- html - vs code live server 无法得到错误信息
- list - 我想从序言中的现有列表中制作一个过滤列表
- r - 在数据框中添加两个重复列并删除重复项
- php - TCPDF JSON 年假安排
- javascript - 从 .env 文件中获取未定义