跳到主要内容

Visual Studio Code使用笔记

阅读量: 101
阅读人次: 102

Visual Studio 2026 正式版已经发布了,我安装使用了下,还是使用不太习惯。

Qt Creator 我觉得因为 Qt 要收费,总觉得有点膈应。(异想天开的想着万一自己哪天做出了一个商业应用呢,啊哈哈.......)

CLion 也曾用过一会,也用不太习惯。

思来想去,还是 Visual Studio Code 比较好用,不仅在 Windows 上可以使用,Linux 上同样可以使用。对 WSL 支持同样也超级友好。

推荐设置

ctrl + shift + p 在设置页面搜索enablePreview,取消选择。使得打开文件会重开一个新的窗口。

在 File → Preferences → Settings → Window → Title Bar Style 选择 "window.titleBarStyle": "custom" 以显示VS Code自定义标题栏,这在Ubuntu下尤其有用。

关闭右侧滚动条旁的缩略图:editor.minimap.enabled: false

MSVC BuildTools

注意

Windows 下 C++ 编译器还是需要使用 MSVC,MinGWLLVM MinGW 在编译引用其它第三方库时,比较麻烦,大部分库在 Windows 下只使用 MSVC 做全面测试。另外,MSVC 配合 vcpkg 比较省时省力,通过 vcpkg 可以自动化构建引用我们所指定的 C/C++ 库。

在 Windows 下编译 C++ 代码时,下载 Visual Studio 太庞大臃肿了,微软提供了只下载 Visual Studio 2026 生成工具 (页面滑倒最下方)的方式。

安装完成后,CMake、Ninja 也会被安装,为了后续方便使用,我们可以将其添加至 PATH 环境变量:

D:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin
D:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja

我们还可以在 Windows Terminal 添加选项方便开发:

settings.json
{
"profiles":
{
"defaults": {},
"list":
[
{
"guid": "{b7b2a170-0f74-545d-ba8f-c3436b0c3061}",
"name": "VS2026 BuildTools x64",
"commandline": "%comspec% /k \"D:\\Program Files (x86)\\Microsoft Visual Studio\\18\\BuildTools\\VC\\Auxiliary\\Build\\vcvars64.bat\"",
"icon": "ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png",
"startingDirectory": "E:/Projects",
"hidden": false
}
]
}
}

vcpkg

vcpkg 可帮助我们在 Windows、 Linux 和 MacOS 上管理 C 和 C++ 库。 这个工具和生态链正在不断发展。

首先需要从 GitHub 克隆 vcpkg 存储库。 存储库包含用于获取 vcpkg 可执行文件的脚本,以及由 vcpkg 社区维护的特选开放源代码库的注册表。

git clone https://github.com/microsoft/vcpkg
cd vcpkg; .\bootstrap-vcpkg.bat

设置环境变量:

$env:VCPKG_ROOT="E:\Projects\vcpkg"
$env:PATH="$env:VCPKG_ROOT;$env:PATH"

设置 VCPKG_ROOT 可帮助 Visual Studio Code 查找 vcpkg 实例。 将它添加到 PATH 确保可以直接从 shell 运行 vcpkg 命令。以这种方式设置环境变量只会影响当前终端会话。 若要使这些更改在所有会话中永久存在,需要通过“Windows 系统环境变量”面板进行设置。

然后在我们项目根目录使用 vcpkg new 命令添加一个 vcpkg.json 文件和一个 vcpkg-configuration.json 文件。

vcpkg new --application

我们添加 openssl 包作为依赖项:

vcpkg add port openssl

另外,很多包提供了很多可选功能(在 Features 页面可以找到),我们可以如下:

vcpkg add port sdl3-image[jpeg,png,tiff,webp]

Linux

Linux 下也可以使用,需要安装一些依赖包:

sudo apt install autoconf autoconf-archive automake libtool pkg-config

具体使用参考在 Visual Studio Code 中使用 CMake 安装和管理包

CMake Tools

CMake Tools 支持在 Visual Studio Code 下开发 CMake 项目,且支持对 CMakeLists.txt*.cmake 文件的语法高亮和智能提示等功能。

我们在项目根目录下创建 CMakePresets.json 文件:

{
"version": 2,
"configurePresets": [
{
"name": "app",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"CMAKE_EXPORT_COMPILE_COMMANDS": true
},
"environment": {
"VCPKG_ROOT": "E:/Projects/vcpkg"
}
}
]
}

CMakePresets.json 是现代 CMake 的推荐用法,它定义一组常用的配置组合,如构建类型、编译器路径、缓存变量等。那么 CMakeLists.txt 只需要专注定义如何编译源代码、链接库、生成目标文件等。简单来说,CMakeLists.txt 定义了 "构建什么" 以及 "如何构建" 的基本规则,而 CMakePresets.json 则定义了 "用什么参数集去构建"。可以把 CMakePresets.json 看作是一个便捷的配置启动器,这样我们平时开发项目时,就不用在重新编译一个 shell 脚本,通过命令行指定 CMake 变量值控制编译了,直接使用 CMake 提供的整套方案即可。有的教程还推荐使用 CMakeUserPresets.json 以便于项目多人协同开发使用,这里我们不做了解,也不使用,有需要再去了解即可。

通过命令行使用:

cmake --preset=app
cmake --build build

C/C++

C/C++ 插件为 Visual Studio Code 开发 C++ 程序提供了支持,使得我们可以在其进行 C++ 编辑,调试。

C/C++插件提供了一套基于Microsoft的IntelliSense引擎或Tag Parser的功能,但是项目源码一大 C/C++ 插件的代码补全和跳转就变得非常慢了。这时可以考虑下文介绍的 clangd。

不过安装 clangd 之后,其会发生插件冲突。

clangd

最近在学习嵌入式Linux驱动开发,免不了就得查看 Linux Kernel 源码。这个时候如果编辑器能够很方便的进行代码跳转,那就非常 Nice 了。

这个时候就可以考虑 clangd 插件了,以其基于Clang编译器的精确分析语言服务器协议 (LSP) 的实现,提供了更接近编译器的、通常更快速和准确的代码理解能力。

可以参考 VS Code 插件 clangd的用法 这篇文章对 clangd 插件进行配置,其中最重要的就是要成功生成 compile_commands.json 文件,compile_commands.json 对于 clangd 来说至关重要。没有它,clangd将不知道如何正确编译你的源文件(包括使用哪些宏、包含哪些头文件目录、使用什么语言标准等),从而导致诊断不准确、补全功能受限甚至完全失效。

当使用 CMake 作为构建系统时,生成 compile_commands.json 很容易,只要将 CMake 变量 CMAKE_EXPORT_COMPILE_COMMANDS 设置为 ON 就行。如果是其它构建系统(如 Make),我们可以使用 Bear 这个工具来生成 compile_commands.json,它通过拦截编译命令来生成数据库。例如我们在阅读内核代码时,可以通过如下命令生成 compile_commands.json 文件:

bear -- make ARCH=arm64 tspi-rk3566-user-v10-linux.img -j12

# CMake也可以使用bear,其输出的compile_commands.json比CMake更加完善
bear -- cmake --build build --target all
提示

如果当前目录有几个子目录是分别构建的,可以考虑将每个构建生成的 compile_commands.json 文件合并成一个 compile_commands.json,在交由 clangd 解析。

如果 clangd 建立索引之后,还是无法跳转。关注 vscode 下 clangd 插件的输出:

E[02:02:21.088] Could not build a preamble for file /home/amass/Projects/tspi_linux_sdk_repo_20240131/kernel/drivers/leds/leds-gpio.c version 1: CreateTargetInfo() return null

E[02:02:21.088] error: unknown target ABI 'lp64'

I[02:02:21.088] --> workspace/semanticTokens/refresh(0)

I[02:02:21.088] <-- reply(0)

E[02:02:21.089] Failed to prepare a compiler instance: unknown target ABI 'lp64'

这个时候需要在项目根目录新建 .clangd 文件:

.clangd
CompileFlags:
# compile_commands.json 在kernel子文件夹下
CompilationDatabase: kernel
Remove: [-mabi=lp64]

更多具体用法可参考clangd 官网

你可以同时安装官方的C/C++插件和clangd插件。它们通常可以共存,但你需要禁用官方插件的某些功能,以免与clangd冲突或重复:

  • 打开VS Code设置。
  • 搜索 C_Cpp.intelliSenseEngine,将其设置为 "Disabled"。这会禁用官方插件的IntelliSense引擎,让clangd接管诊断、补全等功能。
  • 搜索 C_Cpp.autocomplete,将其设置为 "Disabled"
  • 搜索 C_Cpp.errorSquiggles,将其设置为 "Disabled"
  • 搜索 C_Cpp.Formatting,将其设置为 "Disabled"
  • 你可能仍然希望保留官方插件的代码格式化(如果使用的话)、调试支持等功能。

通过这种方式,你可以在享受clangd带来的精确和快速的代码智能化的同时,利用官方插件提供的其他实用功能。

clangd 下载

clangd 的 Github 上下载是个不错的选择,免得 apt 安装各种依赖包。

GitLens

GitLens — Git supercharged:这个插件可以在每一行查看commit记录。

Remote - SSH

使用 Remote - SSH 能够很方便的在 VS Code 下访问远端主机。安装好插件之后,

编辑 ssh 配置文件 ~/.ssh/config (Windows下一般为 C:\Users\your_account\.ssh\config)。

~/.ssh/config
Host my-remote-server
HostName example.com
User your-username
IdentityFile /path/to/your/private/key
Port 22
  • Host 是你为这个连接定义的别名。使用中可以通过命令 ssh my-remote-server 登录远端而不必输入 ssh your-username@example.com

  • HostName 是远程服务器的 IP 地址或域名。

  • User 是你的远程服务器用户名。

  • IdentityFile 是你的私钥文件的路径。确保 VSCode(或其后台进程)有权限读取这个文件。

    私钥文件可能存在文件权限太宽松导致 ssh 提示:

    Bad permissions. Try removing permissions for user: NT AUTHORITY\\Authenticated Users (S-1-5-11) on file E:/Projects/id_rsa_amass.
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    Permissions for '.\\id_rsa_amass' are too open.
    It is required that your private key files are NOT accessible by others.
    This private key will be ignored.
    Load key ".\\id_rsa_amass": bad permissions

    在 Windows 下可以以管理员权限打开终端,然后运行如下命令,使得私钥文件只有 amass 才有权限读写:

    icacls.exe E:\Projects\id_rsa_amass /inheritance:r /grant amass:R

    权限修改完成后,就能正常访问 ssh 服务了。

  • Port 是 SSH 服务的端口,通常是 22,除非服务器配置了不同的端口。

项目推荐配置

在项目下新建.vscode/settings.json,建议填入如下内容:

{
"editor.formatOnSave": true,
"editor.formatOnSaveMode": "modificationsIfAvailable",
"files.exclude": { // 隐藏文件夹
"calibration":true, // 根目录下的calibration目录
"canbus":true // 根目录下的canbus目录
}
}