如何将clangd(eglot)设置为使用C++20标准?
解决eglot搭配clangd设置C++20标准的问题
方案1:校验compile_commands.json的有效性
- 确保每个条目里的
command字段明确包含-std=c++20,示例格式:{ "directory": "/absolute/path/to/project", "command": "clang++ -c -std=c++20 -o main.o main.cpp", "file": "main.cpp" } - 所有路径必须用绝对路径,clangd对相对路径的解析容易出问题
- 重启clangd服务:在Emacs中执行
M-x eglot-shutdown关闭当前服务,重新打开项目文件触发重启
方案2:用项目级clangd配置强制指定标准
- 在项目根目录创建
.clangd文件,写入以下内容:
这个配置会覆盖compile_commands.json的对应参数,确保clangd全局使用C++20CompileFlags: Add: [-std=c++20]
方案3:在Emacs的eglot配置中直接传递参数
- 在Emacs配置文件(如init.el)中添加:
启动clangd时会直接带上该参数,优先级高于项目本地配置(setq eglot-server-programs '((c++-mode . ("clangd" "-std=c++20"))))
方案4:排查全局配置干扰
- 检查用户目录下的
~/.clangd文件,或是系统级clangd配置,这些可能会覆盖项目设置 - 确认项目中没有
.clang-tidy、.clang-format等文件附带冲突的编译参数
内容的提问来源于stack exchange,提问作者floatfoo
相关产品推荐
相关产品推荐

