tag

vscode 配置 C/C++ 开发环境

Posted by Steel Shadow on May 27, 2024

这事本来大一就想整了,用 devc 浑身难受。后面 vscode 配置环境整了一天,废好大劲配完,Microsoft 的 C/C++ 插件用着不顺手,style 不合审美,intellisense 补全延迟高。

再后来,大三的编译课用 CLion,体验比 vscode 好了一个档次。但是 CLion 内存占用太高了,性能太拉胯(最近的 Nova 使用 ReSharper 大大提升了性能),还是收费的(虽然学生免费)。上编译的时候,就想着在 vscode 上配 clang + clangd 的开发环境。

早就完成的事,最近不忙,就想记下来。

下面的配置过程都针对 windows,linux 包管理器一键装了,自己构建步骤也和下面的几乎一致,但建议看官方文档。

获取 clangd

直接下载

可以直接下载预制好的二进制 clangd

从源码构建

我选择直接从 LLVM 源码编译 clang、clangd 和 clang-tidy clang-format 等其它工具。

为了构建上述工具,需要配置好编译环境,windows 上可以配置 Visual Studio 或者 MSYS2 的 UCRT64

这两种编译环境,构建出的 clang 的标准库、头文件和库搜索路径以及工具(尤其是链接器)不同。如果使用 Visual Studio,构建的 clang 的默认 target 就是 x86_64-pc-windows-msvc,如果使用 URCT64 则是 x86_64-w64-windows-gnu

我使用的 CMake 命令如下,具体见文档,这里只写了比较关键的一步

1
cmake -S llvm -B build -G Ninja -DLLVM_ENABLE_PROJECTS="clang;lld;clang-tools-extra" -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86"

构建完毕后,将 LLVM 的 bin 路径添加到 Path,如 D:\CodeLibrary\llvm-project\build\bin\

1
2
3
4
5
clang --version
clang version 19.0.0git (git@github.com:llvm/llvm-project.git c87a7b3bdb673747f2242ba2edc7d5b2f5b53c30)
Target: x86_64-w64-windows-gnu
Thread model: posix
InstalledDir: D:/CodeLibrary/llvm-project/build/bin

启用 clangd

详见文档

为了使 clangd 理解项目结构,CMake 需要开启 set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

1
2
3
clangd is based on the clang C++ compiler, and understands even complex C++ code. However, you must tell clangd how your project is built (compile flags). A compile_commands.json file can usually be generated by your build system (e.g. with CMake, by setting -DCMAKE_EXPORT_COMPILE_COMMANDS=1).

See Project Setup in the clangd documentation for details and alternatives.

clang-format clang-tidy

clangd 内置支持 clang-format clang-tidy,只需要提供相应的配置文件即可。配置文件 .clang-format 和 .clang-tidy 可以放在项目目录或者父级目录。

clang-format 用于格式化。

1
2
BasedOnStyle: LLVM
# 更多其它选项...

clang-tidy 用于代码静态分析,clangd 支持其中的一部分。vscode 使用了 clangd 插件后并提供配置文件后,可以提供代码警告。

1
2
Checks: "clang-diagnostic-*,clang-analyzer-*,cert-,misc-*,performance-*,readability-*,portability-,modernize-*"
# 更多其它选项...

clang-tidy 效果图,配完终于有点 IDE 那味了。 clang-tidy

结语

vscode 配置到这样,应该就是终极形态了,但还是不如 CLion 和 Visual Studio 强大。

开源用爱发电,也不能要求太多了。