# Visual Studio Code 安装

这一块应该没什么好细说的,到官网上下载就可以了。

# 虚拟机 安装

我个人的开发环境是,物理机 Windows + 虚拟机 Ubuntu ,因此需要安装一个虚拟机应用。
可以看你个人选择自己喜好的虚拟机应用,例如 VMWare WorkstationVirtualBox
这里我使用的是 VMWare Workstation

# Ubuntu 安装

虚拟机上安装 Ubuntu 的话,网上的教程也很多,也不赘述了,我这里装的是桌面版的。

# 配置 VsCode 的远程开发

我们需要在 Windows 上进行 Linux 下的开发, VsCode 给我们提供了一个很好的方案,使用 SSH 进行远程开发。

# VsCode 扩展

这是 VsCode 中,微软提供的一个扩展。
首先启动 VsCode ,选择 Extensions(Ctrl+Shift+X) 选项卡,搜索 Remote
安装 Remote - SSH 扩展:

  1. Remote - SSH
  2. Remote Explorer
    • 会被自动安装
  3. Remote - SSH: Editing Configuration Files
    • 会被自动安装

# OpenSSH

WindowsUbuntu 中都需要安装。

# Windows

在虚拟机中测试了一下,似乎 Windows 10 上已经预置了。

# Ubuntu

Ubuntu 下的安装相当简单:
sudo apt-get install openssh-server

以下命令启动 ssh 服务
sudo /etc/init.d/ssh start

以下命令查看 ssh 服务 是否启用:
ps -e|grep ssh

有进程 sshd 在运行就是 ok 了。

# 配置免密登录

我们需要让 Linux端的OpenSSH服务 识别我们的身份,以实现免密登录。

# 生成密钥对

Windows PowerShell 中输入以下命令:
ssh-keygen

随后第一个待输入:

1
2
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\yuyu/.ssh/id_rsa):

直接回车。

第二个待输入,可以直接回车不设置密码,如果为了安全你也可以设置:

1
2
Created directory 'C:\Users\yuyu/.ssh'.
Enter passphrase (empty for no passphrase):

接下来要求重复输入密码,忽略了密码就继续回车:

1
Enter same passphrase again:

完成生成:

1
2
3
4
5
6
7
8
9
10
11
+---[RSA 3072]----+
| .|
| . o o . o|
| . E +o= X .o|
| . = ++*+= X.o|
| o .S==o.o.B |
| ooB.. .o o|
| +oo .=|
| . oo|
| . |
+----[SHA256]-----+

接下来在以下用户路径中即可找到生成的公钥和私钥文件:
C:\Users\yuyu\.ssh

其中 yuyu 替换成你自己的用户名。

# 配置公钥

如果你是安装的桌面版 Ubuntu ,就可以很轻松的在 VMWare Workstation 中通过拖动来传输文件。

Ubuntu桌面 中打开文件浏览器,会显示在 Home 目录下 (实际路径是 /Home/你的用户名~ ),按下 Ctrl + H ,即可显示隐藏文件。
可以看到一个目录 .ssh ,进入。

Windows 下生成的公钥文件 id_rsa.pub 复制到 Linux 的 .ssh 目录下。

通过以下命令将公钥追加到 authorized_keys 文件中:

1
2
3
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
rm id_rsa.pub

# VsCode 远程连接

# 查看 ip

Linux终端 下输入:
hostname -I

记下此 ip

# 配置连接目标

回到 VsCode 中,由于我们安装了扩展,侧边选项卡新增了一个图标 ( Remote Explorer )。

选择该选项卡,随后点击 齿轮 按钮。

选择第 1 项:

配置如下:

1
2
3
4
5
6
7
8
9
10
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
# Host alias
# HostName hostname
# User user

Host Ubuntu
HostName 192.168.229.132
User yuyu
Port 22
# IdentityFile ~/.ssh/id_rsa

将 ip 和用户名 (都是 linux 的) 修改为你的,保存即可。

点击齿轮旁边的刷新按钮,即出现了你添加的主机,开始连接吧!

这里选择 Linux

继续。

由于我们配置了免密登录,此时我们成功连接了!

接下来可以打开一个文件夹了,这里我创建了一个 project 的目录来管理我的项目。

至此,我们的远程开发环境就已经配置完毕了。

# 在 VsCode 中构建与调试项目

# CMake

先前我就纠结过是选择 CMake 还是 XMake 来管理项目工程,最后还是选择了 CMake,因为用的人比较多吧,学习一下总不是坏事。

# 安装

Linux终端 输入命令:
sudo apt install cmake

# 资料

这里推荐两篇文章:
1.CMake 保姆级教程(上)
2.CMake 保姆级教程(下)

能够快速上手 CMake 并了解到足够在当前阶段使用的知识。

# VsCode 扩展

  1. C/C++ & C/C++ Extension Pack
    • 语法、浏览、调试等辅助扩展。
  2. C/C++ Themes
    ` - 非必要,C++ 主题。
  3. CMake & CMake Tools
    • cmake
  4. Native Debug
    • 调试辅助扩展。
  5. C/C++ Compile Run
    • 非必要,单文件运行扩展,按 f6 即可直接编译运行当前浏览的源文件。
  6. clangd
    • 这个和 C/C++ 是差不多的作用,两个扩展是不能同时启用的 (存在冲突),我尝试了一下还是 C/C++ 更好用一点。
  7. Catppuccin Noctis
    • 非必要,感觉还行的主题。
  8. Remote - SSH
    • 远程开发,已经安装了。

# Hello world!

好了,接下来是喜闻乐见的 Hello world 环节。
咱们来学习如何构建和调试项目。

我这里在 VsCode 的远程连接状态中打开目录:
/home/yuyu/project/hello_world

# 编写源代码

新建源文件:

敲上代码:

1
2
3
4
5
6
#include <iostream>

int main() {
std::cout << "hello world" << std::endl;
return 0;
}

# 构建

代码是写完了,接下来我们如何构建呢?
我们这里用 CMake 做示例,尽管只有一个文件,杀鸡用牛刀的感觉,但我们真正开发项目自然是需要更加现代的项目管理方式的。

同目录下新建 CMakeLists.txt 文件,输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cmake_minimum_required(VERSION 3.0.0)
project(hello_world)

# Output path of the library
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

# We need to enable debugging information.
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

# All original files in the current path.
aux_source_directory(${PROJECT_SOURCE_DIR} SRC_LIST)

# build
add_executable(hello_world ${SRC_LIST})

# 构建方法一

在终端中输入:

1
2
3
4
mkdir build
cd build
cmake ..
make all

# 构建方法二

右键 CMakeLists.txt 文件
1.Configure All Projects
2.Build All Projects

顺利的话都能够看到出现了一个 bin 目录,目录中就有我们编译的文件了。

# 调试

接下来配置调试,让我们的开发体验更贴近 IDE。

菜单栏中选择 Run -> Add Configuration ,在弹出的菜单中选择 GDB

将此处的 ./bin/executable 修改成 ${workspaceRoot}/bin/hello_world

回到 hello_world.cpp ,在第 4 行处按下 f9 设置断点, f7 编译, f5 运行。
成功断下!

# 附加调试

如果希望附加调试,则使用:

1
2
3
"request":"attach",
"processId":"${command:pickProcess}",
"program": "${workspaceRoot}/bin/hello_world",

附加可能会出现需要 root 权限的情况, 使用 root 用户登录可以解决此问题。

也可以添加多个配置,在调试选项卡的开始调试框中,可以切换使用哪个配置进行调试。

# F5 自动构建

菜单栏中选择 Terminal -> 配置任务 ,在弹出的菜单中选择 CMake: build
会创建一个 tasks.json
也可以自己创建,这里贴上我的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// tasks.json
{
"tasks": [
{
"type": "cmake",
"label": "CMake: build",
"command": "build",
"targets": [
"all"
],
"group": "build",
"problemMatcher": [],
"detail": "CMake template build task"
}
],
"version": "2.0.0"
}
  • 接下来在 launch.json 添加一行,注意和 task 的 label 保持一致:
1
"preLaunchTask":"CMake: build"

# 完整配置示例

  • 新版本 vscode 可能变动,这里我这里贴上新版本的配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bin/ynet_test",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask":"CMake: build"
}
]
}

# GCC 升级至 13.2

由于 Ubuntu22.04 自带的 GCC 版本是 11 的,这里因为个人需要需要升级成 13,特意记录一下。

# 下载 GCC

1
wget http://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.gz

# 解压

1
tar xf gcc-13.2.0.tar.gz

# 安装组件

1
2
cd gcc-13.2.0/
./contrib/download_prerequisites

# 构建

注意–prefix=/usr/local/gcc-13.2.0 是为了指定安装目录,方便后续切换 gcc 版本。
这里指定路径会有其他问题,比如需要查看 gcc -v 还是 11.4.0,自行解决 。

1
2
3
mkdir build && cd build
../configure --prefix=/usr/local/gcc-13.2.0 -enable-checking=release -enable-languages=c,c++ -disable-multilib
sudo make -j4

# 安装

1
sudo make install

# 更新 C++ 库

不更新的话编译出来的程序会无法运行。

1
2
3
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install --only-upgrade libstdc++6

# 查看更新结果

1
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

以下是新的 C++ 库

1
2
3
4
...
GLIBCXX_3.4.31
GLIBCXX_3.4.32
...

# 参考

  1. Linux 上安装使用 SSH (ubuntu&&redhat)
  2. VS Code Remote SSH 配置
  3. Linux 系统 ubuntu22.04 安装最新版的 gcc13.1.0 编译器,支持 c++20、23
  4. “`GLIBCXX_3.4.32’ not found” error at runtime. GCC 13.2.0