C++使用OpenCV 4.1.2遇头文件找不到错误,CMake配置求助
解决OpenCV头文件在库目标中找不到的问题
这个问题的核心是你只给可执行文件program关联了OpenCV的依赖,但src库目标在编译时并没有获取到OpenCV的头文件搜索路径,所以编译src目录下的文件时会找不到opencv2/opencv.hpp。
修复方案
你需要让src库目标也能访问到OpenCV的头文件和库依赖,修改你的CMakeLists.txt如下:
cmake_minimum_required(VERSION 2.8.12) project(Barcode-cpp) find_package(OpenCV REQUIRED) add_compile_options(-std=c++11) # 定义src库,并关联OpenCV依赖 add_library(src src/VideoVeed.h src/VideoVeed.cpp) # 给src库添加OpenCV的头文件路径和库依赖 target_link_libraries(src PRIVATE ${OpenCV_LIBS}) add_executable(program program/main.cpp) target_link_libraries(program src ${OpenCV_LIBS})
关键修改说明
target_link_libraries(src PRIVATE ${OpenCV_LIBS}):这一步会自动将OpenCV的头文件搜索路径添加到src库的编译选项中,同时链接OpenCV的库文件。PRIVATE表示这些依赖只在编译src自身时需要,不需要暴露给依赖src的program目标(当然program自己也链接了OpenCV,所以不影响)。- 如果你的CMake版本允许(比如升级到3.x),更推荐使用
target_include_directories显式指定头文件路径,不过上面的方式在2.8.12中也能正常工作:target_include_directories(src PRIVATE ${OpenCV_INCLUDE_DIRS})
额外建议
- 尽量升级你的CMake版本到3.10以上,2.8.12是非常老旧的版本,很多现代CMake的特性都不支持,比如更清晰的目标依赖管理、C++标准设置(可以用
set(CMAKE_CXX_STANDARD 11)代替add_compile_options(-std=c++11))。 - 库名
src有点模糊,建议改成更有意义的名字,比如video_utils,避免和目录名混淆。
内容的提问来源于stack exchange,提问作者mHvNG
相关产品推荐
相关产品推荐

