如何在Neovim中配置C++项目的Include目录适配clangd
解决clangd识别不了Include目录的问题
为啥会这样?
clangd是靠compile_commands.json文件获取项目编译配置的,包括哪些目录属于include路径、用什么编译选项这些。你用Premake配好了include目录能正常编译,但没生成这个文件,clangd自然不知道你加了这些路径。
怎么解决?
1. 改Premake配置,让它生成compile_commands.json
打开你的Premake配置文件(比如premake5.lua),加俩关键配置:一是把include/TestLib设为include目录,二是开启生成compile_commands.json的选项。示例配置如下:
workspace "MyProject" configurations { "Debug", "Release" } location "build" -- 开启compile_commands.json生成 compilecommands "On" project "MyProject" kind "ConsoleApp" language "C++" targetdir "bin/%{cfg.buildcfg}" objdir "obj/%{cfg.buildcfg}" -- 把TestLib所在目录加入include路径,这样就能直接写#include "lib.hpp" includedirs { "../include/TestLib" } -- 把src下的所有cpp文件加进来 files { "../src/**.cpp" }
2. 重新生成构建文件
在项目根目录跑Premake命令,生成构建文件和compile_commands.json:
premake5 gmake2 # 换成你用的生成器,比如vs2022、xcode都可以
跑完之后,compile_commands.json会出现在你配置的build目录里。
3. 让clangd找到这个文件
有两种简单方法:
- 方法一:软链到项目根目录
在项目根目录执行这条命令,把build里的文件链到当前目录:ln -s build/compile_commands.json . - 方法二:在Neovim里指定路径
打开你的Neovim配置文件(比如init.lua),给clangd加个配置,指定compile_commands.json所在的目录:require'lspconfig'.clangd.setup{ cmd = { "clangd", "--compile-commands-dir=./build", -- 这里填你实际的build目录路径 } }
4. 验证一下
把src/main.cpp改成你想要的写法:
#include "lib.hpp" int main(){ Log("Hello world"); }
重新打开Neovim,clangd应该就不会再报找不到lib.hpp的错了。
内容的提问来源于stack exchange,提问作者DSlower
相关产品推荐
相关产品推荐

