如何在VS Code的clangd中指定C++14版本?
解决VS Code中clangd对C14项目提示C17特性的问题
以下是几种可靠的解决方法,按优先级排序:
1. 生成compile_commands.json(最推荐)
clangd会优先依据这个文件获取项目的编译标准和参数,这是最准确的方式:
- 如果用CMake构建项目:
在CMakeLists.txt里添加两行配置:
重新生成CMake配置时加上导出编译命令的参数:set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON)
将生成的cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..compile_commands.json放到项目根目录即可。 - 如果不用CMake,手动创建
compile_commands.json:
替换成你的项目路径和编译命令,示例如下:[ { "directory": "/home/yourname/your-project", "command": "g++ -std=c++14 -Wall -c src/main.cpp", "file": "src/main.cpp" } ]
2. 直接给clangd指定C++14标准
如果暂时没法生成compile_commands.json,可以通过VS Code设置强制clangd使用C++14:
- 打开VS Code设置(快捷键
Ctrl+,),搜索clangd: Arguments - 添加参数
--std=c++14,最终配置类似:
注意:如果项目存在"clangd.arguments": [ "--std=c++14", // 其他你需要的clangd参数 ]compile_commands.json,这个设置会被覆盖。
3. 配置clang-tidy遵循C++14
如果提示确实来自clang-tidy,在项目根目录创建.clang-tidy文件,明确指定标准:
Language: C++ Standard: C++14 # 其他clang-tidy检查规则可按需添加 Checks: '-*,readability-*'
补充说明
之前设置clang-tidy参数无效,大概率是因为clangd优先读取了未指定C++14的项目编译配置(比如缺失正确的compile_commands.json),导致clang-tidy继承了较高的标准。重启clangd时提示短暂消失,是因为缓存被清空,但重新初始化时又读取了默认的高版本标准,所以会再次出现提示。
内容的提问来源于stack exchange,提问作者Felix Dombek
相关产品推荐
相关产品推荐

