ArcoLinux下Emacs用clang-lsp开发OpenCV项目找不到头文件求助
问题根因
- CMake命令执行路径错误:
CMAKE_EXPORT_COMPILE_COMMANDS参数需要作用于你自己的项目根目录~/Projects/opencv++/,而非OpenCV的系统安装目录 - CMake参数拼写错误:你输入的参数为
CMAKE_EXPORT_COMPILE_COMMDANS,正确拼写为CMAKE_EXPORT_COMPILE_COMMANDS - 头文件引用层级错误:你的OpenCV头文件根目录为
/usr/include/opencv4,代码中写#include <opencv2/opencv.hpp>时,编译器需要从/usr/include/opencv4路径开始查找,无需直接指向/usr/include/opencv4/opencv2
方案1:通过CMake生成compile_commands.json(推荐)
该方案同时解决代码补全识别和项目编译的配置问题,适合长期项目使用:
- 进入项目根目录
cd ~/Projects/opencv++/
- 在根目录新建
CMakeLists.txt,写入以下配置(按你的项目实际情况调整可执行文件名、源码文件名):
cmake_minimum_required(VERSION 3.10) project(opencv_cpp_demo) # 配置C++标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 自动查找系统中安装的OpenCV库 find_package(OpenCV REQUIRED) # 引入OpenCV头文件路径 include_directories(${OpenCV_INCLUDE_DIRS}) # 替换为你项目中的实际源码文件名,例如main.cpp add_executable(opencv_demo main.cpp) # 链接OpenCV动态库 target_link_libraries(opencv_demo ${OpenCV_LIBS})
- 执行CMake命令生成编译配置文件:
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .
执行完成后项目根目录会自动生成compile_commands.json,clang-lsp会自动读取该文件识别OpenCV头文件路径,重启Emacs的LSP服务即可生效。
方案2:无需CMake,直接配置clangd识别路径
如果是临时小型项目不想配置CMake,可以直接在项目根目录新建.clangd配置文件,写入以下内容指定头文件路径:
CompileFlags: Add: - -I/usr/include/opencv4
保存配置后重启clang-lsp服务即可生效。
编译验证
配置完成后可通过以下命令编译测试你的项目,确认OpenCV依赖正常:
g++ main.cpp -o opencv_demo `pkg-config --cflags --libs opencv4`
内容的提问来源于stack exchange,提问作者caguar
相关产品推荐
相关产品推荐

