Windows下使用Visual Studio + WSL2开发Linux项目之环境部署

一、下载安装Visual Studio

1.1 下载地址

推荐下载Visual Studio 2022 预览版,64位架构,速度更快

1.2 安装C++项目工具集

打开安装器,勾选使用 C++ 的桌面开发使用 C++ 的 Linux 开发,安装目录可以更改
image

image

二、安装wsl2

先决条件

必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令。 如果使用的是更早的版本,请参阅手动安装页
BIOS开启CPU虚拟化。

2.1 安装 WSL

  • 从微软商店获取Ubuntu 22.04.2 LTS
  • 在管理员模式下打开 PowerShell,输入 wsl --install 命令,然后重启计算机。
wsl --install

此命令将启用运行 WSL 并将Ubuntu安装为默认发行版。 (可以更改此默认发行版)。
重新启动计算机,打开安装的Ubuntu-22.04,根据提示逐步设置用户名和密码。
image

2.2 安装 Windows 终端(推荐)

参考搭建优雅的Windows终端,只需要执行其中的一、二、4.2

下载编程英文字体,解压后全选字体——为所有用户安装
image

配置完成后,在管理员模式下打开 Windows terminal 或者 PowerShell,执行以下命令,升级WSL。

wsl --update  
wsl --shutdown

2.3 更换清华大学源

打开Windows终端,下拉选择Ubuntu-22.04进入wsl
image

方法1:手动替换

sudo nano /etc/apt/sources.list

打开Ubuntu 的软件源配置文件,将里面的内容全部删除,替换为以下内容:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse

方法2:命令替换

执行如下命令自动替换

sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list

更新软件源,安装必要工具

sudo apt update && sudo apt upgrade -y
sudo apt install curl wget git ca-certificates build-essential net-tools -y
sudo apt install g++ gdb make ninja-build rsync zip -y

2.4 WSL ssh 配置

老样子,打开Windows终端,下拉选择Ubuntu-22.04进入wsl

  • 重新安装openssh-server
sudo apt remove openssh-server
sudo apt install openssh-server -y
sudo service ssh start
sudo service ssh status
sudo systemctl enable ssh
  • 在Ubuntu中查看WSL2的ip(默认为浮动IP,每次重启Ubuntu后改变)
ifconfig

image

然后可以在Windows terminal中SSH该IP进行登陆。

ssh [用户名]@[ip]

image

固定WSL IP

为了方便 Visual Studio 通过 ssh 连接 WSL 编译项目,需要固定WSL IP。这里采用端口转发的方法迂回完成此目标。

  • 打开Ubuntu22.04,编辑ssh配置文件 /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
  • 添加以下两行内容,用于更改端口号为2000,允许ssh密码登录权限
Port 2000
PasswordAuthentication yes

image

  • 防火墙允许2000端口
sudo ufw allow 2000

image

  • 重启ssh服务和防火墙
sudo service ssh restart
sudo ufw reload
  • 管理员模式下打开 Windows terminal或powershell,配置端口转换
netsh interface portproxy add v4tov4 listenport=2100 listenaddress=0.0.0.0 connectport=2000 connectaddress=localhost

image

之后本机就可以通过ssh [用户名]@127.0.0.1 -p 2100来连接WSL啦
image

三、基于 WSL 2 和 MSBuild 的 Linux 项目

3.1 创建项目

打开Visual Studio,创建新项目—选择 C++ Linux 控制台应用程序—填写项目和解决方案名称、选择项目保存目录,完成创建
image

image

image

3.2 配置跨平台

工具——选项
image

跨平台——连接管理器——添加,填写WSL IP、用户名、密码。点击连接,接受保存指纹。
image

可以看到Debug已经出现了WSL 的连接
image

修改字体,使o0lI便于区分
image

3.3 生成项目

项目属性——常规——平台工具集,选择WSL2 GCC Toolset,点击确定返回。

VS2019没有WSL2 GCC Toolset,则选择GCC for Windows Subsystem for Linux工具集

image

按 F7 或者 生成——生成解决方案,可以看到已经成功生成了解决方案

如果重新启动Windows后连接不上WSL的ssh,需要尝试重启 SSH 服务器(在 Ubuntu 上命令为 sudo service ssh restart

image

从Windows terminal 进入Ubuntu子系统,进入项目文件夹

cd ~/projects/[项目名称]
# 本文中为 cd ~/projects/cppwsl

进入执行文件生成目录

cd ~/projects/[项目名称]/bin/x64/Debug
# 本文中为 cd ~/projects/cppwsl/bin/x64/Debug

运行执行文件,输出问好。
image

注:Visual Studio 的 GDB 调试程序可以用于打断点调试,功能很强大。
但最好不要直接用于执行文件,有些函数不一定能执行出来。
执行文件还是老老实实进入Debug目录,手动执行
image

posted @ 2023-02-20 02:29  云吱  阅读(2765)  评论(1编辑  收藏  举报