Windows开发环境搭建
一开始接触到程序开发时,使用的就是 Windows 系统,那是已经是 Windows 8.1 了吧。从那时开始,总是喜欢折腾重装系统,强迫症迫使总想装一个十分干净的系统,或者哪里配置错了就立马想着重装。重装解决一切问题,真不是说着玩玩的,但是也浪费了大把时间。嗯,把这个时间用来干啥不好......
系统安装
下载 Windows 11 ISO文件,准备一个8G或以上的U盘,使用 Rufus 创建USB启动盘。
在对硬盘进行分区的时候,每个磁盘分区在格式化之后都会少100MB(或200MB,不清楚原因,可以尝试),所以如果我们想正好分配250G(资源管理器看到的磁盘总大小)给D盘的话,那么需要分配总大小 :
100MB+250*1024MB=256100MB
在安装过程中,我们希望跳过网络连接和微软账户登录。因为这样会使得用户目录不太优雅,极有可能我们的用户目录是 C:\Users\16806 这样的邮箱前缀,或者 C:\Users\张三 这样带中文的目录,给编程有些程序调试带来障碍(有些程序不能很好的兼容非ASCII字符路径)。所以我们在安装的过程中,一定要记住断开网络,在安装引导界面键入Shift + F10 调出CMD窗口,然后输入:
OOBE\BYPASSNRO
跳过网络连接。
安装WSL2
安装完系统后,推荐立马安装WSL2,目前我觉得这是一个非常不错的Windows下开发工具套件。但是此前安装过程中,因为网络等问题出现过各种稀奇古怪且在Google搜不到的问题,所以推荐安装完系统后立马安装WSL2,这样一来如果出现问题我们可以立马选择重装系统重新来一遍。
wsl --install
# 重装
wsl --unregister Ubuntu
wsl --install Ubuntu
移动位置
安装完WSL之后,为了避免占用C盘过多空间,一般选择移动到其他几个磁盘分区中:
D: # 进入根目录 D:/
wsl --shutdown
wsl --list
wsl --export Ubuntu Ubuntu.tar
wsl --unregister Ubuntu
wsl --import Ubuntu D:\Ubuntu D:\Ubuntu.tar
如果需要配置WSL2,例如限制占用最大内存等等,可创建C:\Users\%YourName%\.wslconfig文件然后参考 WSL 中的高级设置配置进行配置。
中文设置
参考 Ubuntu 开发环境搭建 中文设置。
OpenSSH Server
参考 Ubuntu 开发环境搭建 OpenSSH Server 安装配置后,我们还需打开端口的 Windows 防火墙:
New-NetFirewallRule -DisplayName "WSL2 SSH" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 1022
创建 Powershell 文件启动 sshd 服务,然后对该 SSHD 端口流量进行转发:
# 启动 sshd 服务
wsl -u root -e sh -c "service ssh start"
$wsl_ip = (wsl hostname -I).trim()
netsh interface portproxy delete v4tov4 listenport=1022
netsh interface portproxy add v4tov4 listenport=1022 connectport=1022 connectaddress=$wsl_ip
该脚本需要以管理员权限运行。
另外,WSL 如果监测到系统处于空闲状态,会自动结束系统进程,所以我们在运行上述脚本使用 ssh 访问之前,最好在 Windows 先打开一个 Ubuntu 终端让系统一直保持非空闲被使用的状态。
NFS
sudo apt install nfs-kernel-server
配置 NFS 导出目录:
/home/amass/Projects/100ask_stm32mp157_pro-sdk *(rw,sync,no_subtree_check,no_root_squash,insecure)
*允许所有 IP 访问,也可替换为特定 IP 或网段(如192.168.1.0/24)。rw:允许读写。sync:同步写入。no_root_squash:允许客户端 root 用户保留权限(谨慎使用)。- 客户端 mount 失败时,可尝试加上
insecure。
重新加载 NFS 配置:
sudo exportfs -rav
sudo service nfs-kernel-server restart
在管理员权限终端配置 Windows 防火墙:
New-NetFirewallRule -DisplayName "NFS Port 2049" -Direction Inbound -Protocol TCP -LocalPort 2049 -Action Allow
New-NetFirewallRule -DisplayName "NFS Port 2049" -Direction Inbound -Protocol UDP -LocalPort 2049 -Action Allow
对该 NFS 端口流量进行转发:
$wsl_ip = (wsl hostname -I).trim()
netsh interface portproxy delete v4tov4 listenport=2049
netsh interface portproxy add v4tov4 listenport=2049 connectport=2049 connectaddress=$wsl_ip
# 查看所有代理规则
netsh interface portproxy show all
客户端挂载:
mkdir /root/100ask_stm32mp157_pro-sdk
sudo mount -t nfs 192.168.3.6:/home/amass/Projects/100ask_stm32mp157_pro-sdk /root/100ask_stm32mp157_pro-sdk
虚拟磁盘文件
WSL 的虚拟磁盘 ext4.vhdx 文件,如果虚拟机被损坏(例如不小心删掉了一些配置文件,导致无法运行WSL),可以将 ext4.vhdx 备份,然后使用 7-Zip 打开该文件,将重要文件拷贝出来。
.vhdx 虚拟硬盘文件大小会越来越大,我们可以使用磁盘管理工具diskpart 将文件大小变小,首先在停止 WSL,然后在 PowerShell 输入 diskpart 打开工具,然后在新的 diskpart 控制台传入输入如下:
select vdisk file="D:\Ubuntu\DockerDesktopWSL\disk\docker_data.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
MSYS2
MSYS2 在Windwos上提供了一个 Linux 命令环境。安装完成后,使用Windows Terminal作为终端。在Terminal Tab下拉框,找到设置,点击左下角的打开JSON文件,在profiles.list加入如下item:
{
"guid": "{17da3cac-b318-431e-8a3e-7fcdefe6d114}",
"name": "UCRT64 / MSYS2",
"commandline": "D:/msys64/msys2_shell.cmd -defterm -here -no-start -ucrt64",
"startingDirectory": "D:/msys64/home/%USERNAME%",
"icon": "D:/msys64/ucrt64.ico",
"font":
{
"face": "Lucida Console",
"size": 14
}
}
MSYS2更新包:
pacman -Q # 查看已安装的软件包
pacman -Suy # 更新 msys2及其所有已安装的包
pacman -S mingw-w64-ucrt-x86_64-nodejs # 安装nodejs
pacman -R mingw-w64-x86_64-nodejs # 删除软件包
pacman -S git diffutils # 安装常用命令
继承 Windows 环境变量
需要修改 D:\msys64\msys2_shell.cmd 中的 rem set MSYS2_PATH_TYPE=inherit。去掉rem,以取消这⼀句的注释。使MSYS2的环境变量继承 Windows 的 PATH 环境变量。这样就可以在 MSYS2 的终端使用诸如 code VS Code 这样的 Windows 终端命令了。
加入 Windows 环境变量
不建议将 msys2 的命令加入环境变量中,在一些复杂的命令使用情况会遇到一些莫名奇妙问题。例如 git 命令,实测在使用 Qt Creator CMake 通过 git 迁出代码时,会长时间等待。但是 Windows 版本的 Git 就没有这个问题。
Windows 本地环境和 MSYS2 两者字符处理的,路径处理的方式不同也可能会带来一些问题。如果交叉使用某些命令遇到了问题,需要优先考虑是不是这样用带来的问题。
我们在 MSYS2 安装了 Git、Nodejs 等包,也可以将 。D:\msys64\ucrt64\bin、 D:\msys64\usr\bin 路径加入 Windows 的 PATH 环境变量,这样就可以在 Windows 的 CMD 或 Powershell 终端使用来自 MSYS2 的命令了
生成公私/钥
在日常开发中,或多或少都会使用SSH登录远端机器,或者在Docker。这时比起设置密码来说,使用公私/钥进行登录就会比密码便捷安全的多(前提是一定要保护好私钥,不要泄漏出去)。
在构建Docker镜像时,如果我们想未某个用户添加密码,那么通过何种方式(环境变量,或者脚本),密码都是不安全的(不考虑 Docker Swarm),能被通过一些方式查看到(例如 docker inspect)。
ssh-keygen -C "168062547@qq.com"
系统将提示你输入文件保存路径。如果你不想覆盖现有的SSH密钥,可以指定一个新的文件名:
Enter file in which to save the key (/home/amass/.ssh/id_ed25519): /root/amass/id_ed25519_amass
然后提示输入密钥密码(passphrase),为了使用的便捷性,我们选择留空,接受略微降低安全性的损失。
步骤完成之后,会在 /home/amass 目录下生成公钥文件id_ed25519_amass.pub以及私钥文件id_ed25519_amass。
我们可以将公钥添加到远端服务器:
ssh-copy-id -i /home/amass/id_ed25519_amass.pub user@hostname
然后尝试登录:
ssh -i /home/amass/id_ed25519_amass user@hostname
QtCreator
Linux下Perf调试
安装perf
sudo apt install linux-tools-common linux-tools-generic linux-tools-`uname -r`
在terminal输入以下命令
sudo sysctl -w kernel.perf_event_paranoid=1
CLion
在 Settings ➡ Plugins 搜索 Chinese 选择中文语言包,进行汉化。
在 设置 ➡ 编辑器 ➡ 文件编码 中,将 项目编码 改为 UTF-8。将 创建 UTF-8 文件 改为 包含 BOM(因为我大部分的代码都需要在 Windows 下编译)。对于已存在文件,可以在 CLion 下方状态右下角显示文件编码处,点击它更改文件编码。
在 设置 ➡ 编辑器 ➡ 常规 ➡ 代码折叠 中,将 默认折叠 ➡ 常规 下的 文件头 取消勾选。
在 设置 ➡ 编辑器 ➡ 代码样式 ➡ CMake 中,将 制表符和缩进 下的 连续缩进 改为 4。
在 设置 ➡ 编辑器 ➡ 实时模板 中,点击 + 号创建一个实时模板,在 C/C++ 中创建 缩写 为 main 的模板,模板文本为:
int main(int argc, char const *argv[]) {
return 0;
}
然后点击 定义,勾选 C、C++。这样我们在打出 main 时,CLion 会提示出这个模板,选中它按回车即可自动填入模板文本。
在 设置 ➡ 工具 ➡ 保存时的操作 中,勾选 重新格式化代码。(如果项目使用了 Git,)在右侧将 整个文件 更改为 更改的行。
SecureCRT
SecureCRT 相比 PuTTY、MobaXterm 等调试工具有一个突出的优点,它的log功能非常好用,可以在每行log都加入时间戳,精确到毫秒,以下是 SecureCRT 的log配置设置:
打开 Options ➡ Configure ➡ Default Session... ➡ Terminal ➡ Log File:
- 将
Log file name设置为:E:\Downloads\%S-%Y%M%D%h%m%s.log。 - 勾选
Options下的:Overwrite file、Start log upon connect。 - 将
Custom log data下的On each line:设置为:[%h:%m:%s.%t](注意在]加上空格以增强日志阅读性)。
日志文件名和自定义日志数据替换:
- %H:主机名(连接主机的IP地址)
- %S:会话名
- %Y:年份
- %M:月份
- %D:日
- %h:小时
- %m:分钟
- %s:秒
- %t:毫秒
Default Session... 是指配置之后,每次创建新的 session 都会导入该配置,无需重复配置,非常方便。
VMware
VMware Workstation 17 Pro 貌似在兼容性做的不够好,在运行 Windows7、Ubuntu 24.04 时,装好虚拟机运行后就会导致 VMware 直接卡死。这里找到一个临时的解决办法:
在虚拟机的设置中,关闭 加速3D图形 选项。
双系统安装
出于一些原因,可能有时候需要安装双系统,在原理和使用上是没问么问题的。
但是总不这么推荐,因为很容易一个系统破坏另一个系统。结果导致就是又得来一次重装系统,资料丢失。一直在折腾的路上。有钱且不考虑数量体积的前提下,还是推荐一个终端安装一个系统。
引导项设置
这里不叙述 Ubuntu 系统的安装,安装完双系统之后,我们一般选择GRUB作为主引导程序,因为我们大部分时间还是使用Windows,所以需要修改其默认启动Windows。
在 Ubuntu 下以管理员权限使用 nano 编辑 /etc/default/grub 文件:
GRUB_DEFAULT= (GRUB默认启动项)
GRUB_TIMEOUT= (GRUB选择项的等待时间)
修改完成后,在终端输入如下命令,并重启即可。
sudo update-grub
时间不一致
sudo apt install ntpdate
sudo ntpdate time.windows.com
sudo hwclock --localtime --systohc
VirtIOFS共享宿主机文件
主机如下设置:

在Windows虚拟机内,除了安装 virtio-win-0.1.271 以外,还需要安装 winfsp。
其它
删除 远程桌面连接 下拉列表选项:
- 按
Win + R,输入regedit并回车,打开注册表编辑器 。 - 清理连接地址列表:在地址栏导航至
HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default。在右侧窗格中,你会看到一系列以MRU开头的字符串值(如MRU0,MRU1),这些就是下拉框中显示的连接历史记录 。将它们全部删除即可清除下拉列表。