You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义路径下OpenCV依赖的CMakeLists.txt修改方法问询

问题

我正在构建一个依赖OpenCV的代码仓库,其CMakeLists.txt包含如下代码:

find_package(OpenCV 3.0 QUIET)
if(NOT OpenCV_FOUND)
   find_package(OpenCV 2.4.3 QUIET)
   if(NOT OpenCV_FOUND)
      message(FATAL_ERROR "OpenCV > 2.4.3 not found.")
   endif()
endif()

# ...

target_link_libraries(${PROJECT_NAME}
   ${OpenCV_LIBS}
   ${EIGEN3_LIBS}
   # ...
)

当OpenCV安装在/usr/local/opencv时这段代码能正常工作,但我的Ubuntu 18.04机器上OpenCV位于自定义路径/usr/local/my_opencv/,构建时出现如下报错:

CMake Error at CMakeLists.txt:<line number> (message):
  OpenCV > 2.4.3 not found.

我的OpenCV目录结构如下:

milan@my_machine:/usr/local/my_opencv$ tree -L 5
.
├── bin
│   ├── opencv_annotation
│   └── ...
├── include
│   └── opencv4
│       └── opencv2
│           ├── ...
│           ├── core
│           │   ├── ...
│           │   ├── core_c.h
│           │   ├── core.hpp
│           │   └── ...
│           ├── core.hpp
│           ├── ...
│           └── ...
├── lib
│   ├── cmake
│   │   └── opencv4
│   │       ├── OpenCVConfig.cmake
│   │       └── ...
│   ├── ...
│   ├── libopencv_core.so -> libopencv_core.so.4.2
│   ├── libopencv_core.so.4.2 -> libopencv_core.so.4.2.0
│   ├── libopencv_core.so.4.2.0
│   ├── ...
│   ├── opencv4
│   │   └── 3rdparty
│   │       ├── ...
│   │       └── ...
│   ├── ...
│   └── python3.6
│       └── dist-packages
│           └── cv2
└── share
    ├── licenses
    │   └── opencv4
    │       ├── ...
    │       └── ...
    └── opencv4
        ├── ...
        │   └── ...
        ├── ...
        └── ...

请问需要修改CMakeLists.txt中的哪些内容才能解决该报错并完成构建?

解决方案

1. 告知CMake自定义OpenCV的配置路径

CMake依靠OpenCVConfig.cmake文件定位OpenCV,你的该文件位于/usr/local/my_opencv/lib/cmake/opencv4/。在find_package相关代码前添加以下内容,让CMake能找到这个文件:

# 指定OpenCV的配置目录
set(OpenCV_DIR "/usr/local/my_opencv/lib/cmake/opencv4/")

或者通过追加前缀路径的方式(更通用,不覆盖原有路径):

set(CMAKE_PREFIX_PATH "/usr/local/my_opencv/lib/cmake/opencv4/" ${CMAKE_PREFIX_PATH})

2. 简化版本检测逻辑(可选优化)

你的OpenCV是4.2版本,原代码的嵌套查找逻辑可以简化为直接指定最低版本要求,CMake会自动兼容3.x/4.x等更高版本:

# 直接查找版本>=2.4.3的OpenCV,替代原有嵌套判断
find_package(OpenCV 2.4.3 REQUIRED)

这样既保留了版本要求,又避免了冗余的条件判断。

3. 处理头文件路径(按需添加)

从目录结构看,OpenCV头文件在/usr/local/my_opencv/include/opencv4/opencv2/,如果后续编译出现头文件找不到的问题,可手动添加包含目录:

include_directories("/usr/local/my_opencv/include/opencv4/")

通常find_package成功后,OpenCV_INCLUDE_DIRS会自动包含正确路径,所以这一步多数情况不需要,但若出现编译报错可补充。

替代方案:构建时传递参数(无需修改CMakeLists.txt)

如果不想改动CMakeLists.txt,可在执行cmake命令时通过参数指定OpenCV路径:

cmake -DOpenCV_DIR=/usr/local/my_opencv/lib/cmake/opencv4/ ..

内容的提问来源于stack exchange,提问作者Milan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:12:30