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

如何将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文件,写入以下内容:
    CompileFlags:
      Add: [-std=c++20]
    
    这个配置会覆盖compile_commands.json的对应参数,确保clangd全局使用C++20

方案3:在Emacs的eglot配置中直接传递参数

  • 在Emacs配置文件(如init.el)中添加:
    (setq eglot-server-programs
          '((c++-mode . ("clangd" "-std=c++20"))))
    
    启动clangd时会直接带上该参数,优先级高于项目本地配置

方案4:排查全局配置干扰

  • 检查用户目录下的~/.clangd文件,或是系统级clangd配置,这些可能会覆盖项目设置
  • 确认项目中没有.clang-tidy、.clang-format等文件附带冲突的编译参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:45:45