开发环境搭建
阅读量
0
阅读人次
0
双系统安装
Windows
下载Windows 11ISO文件,准备一个8G或以上的U盘,使用Rufus创建USB启动盘。
在对硬盘进行分区的时候,Windows系统会自动创建几个分区(以目前1T固态硬盘作为系统盘为例):
类型 | 总大小 |
---|---|
系统分区 | 100MB |
MSR(保留) | 16MB |
恢复 | 687MB |
再加上每个磁盘分区在格式化之后都会少100MB,所以如果我们想正好分配250G给C盘的话,那么需要分配总大小 :
100MB+16MB+687MB+100MB+250*1024MB=256903MB
在安装过程中,我们希望跳过网络连接和微软账户登录。因为这样会使得用户目录不太优雅,极有可能我们的用户目录是 C:\Users\16806
这样的邮箱前缀,或者 C:\Users\张三
这样带中文的目录,给编程有些程序调试带来障碍(有些程序不能很好的兼容非ASCII字符路径)。所以我们在安装的过程中,一定要记住断开网络,在安装引导界面键入Shift + F10
调出CMD窗口,然后输入:
OOBE\BYPASSNRO
跳过网络连接。
安装WSL2
安装完系统后,推荐立马安装WSL2,目前我觉得这是一个非常不错的Windows下开发工具套件。但是此前安装过程中,因为网络等问题出现过各种稀奇古怪且在Google搜不到的问题,所以推荐安装完系统后立马安装WSL2,这样一来如果出现问题我们可以立马选择重装系统重新来一遍。
wsl --install
移动位置
安装完WSL之后,为了避免占用C盘过多空间,一般选择移动到其他几个磁盘分区中:
D: # 进入根目录 D:/
wsl --list
wsl --export Ubuntu Ubuntu.tar
wsl --unregister Ubuntu
wsl --import Ubuntu D:\Ubuntu D:\Ubuntu.tar
ubuntu.exe config --default-user amass
如果需要配置WSL2,例如限制占用最大内存等等,可创建C:\Users\%YourName%\.wslconfig
文件然后参考 WSL 中的高级设置配置进行配置。
安装中文字体:
sudo apt install language-pack-zh-hans
虚拟磁盘文件
WSL 的虚拟磁盘 ext4.vhdx
文件,如果虚拟机被损坏(例如不小心删掉了一些配置文件,导致无法运行WSL),可以将 ext4.vhdx
备份,然后使用 7-Zip 打开该文件 ,将重要文件拷贝出来。
MSYS2
安装完成后,使用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 # 安装git
在Qt Creator菜单栏:编辑 → Preferences... → 版本控制 → Git → 配置 → 附加在系统PATH之前,填入:
D:\msys64\usr\bin
Ubuntu
下载Linux MintISO文件,准备一个8G或以上的U盘,使用Rufus创建USB启动盘。
分区 建议
待完善......
修改GRUB选项
安装完双系统之后,我们一般选择GRUB作为主引导程序,因为我们大部分时间还是使用Windows,所以需要修改其默认启动Windows。
在Ubuntu下以管理员权限使用vim编辑/etc/default/grub
文件:
GRUB_DEFAULT= (GRUB默认启动项)
GRUB_TIMEOUT= (GRUB选择项的等待时间)
修改完成后,在终端输入如下命令,并重启即可。
sudo update-grub
代码格式化
介绍
平时团队进行合作的时候需要注意代码的格式,虽然很难统一每个人的编码风格,但是通过工具能够很好的管理代码格式。这里介绍下clang-format,它是基于clang的一个命令行工具,能够自动化格式C
/C++
/Obj-C
代码,支持多种代码风格:Google
, Chromium
, LLVM
, Mozilla
, WebKit
,也支持自定义风格(通过编写.clang-format
文件)很方便的统一代码格式。
使用方法
-
Linux下下安装clang-format :
sudo apt-get install clang-format
-
以LLVM代码风格格式化main.cpp, 结果直接写到main.cpp
clang g-format -i main.cpp -style=LLVM
-
当然也支持对指定行格式化,格式化main.cpp的第1,2行
clang-format -lines=1:2 main.cpp
-
vim 中也可以集成该插件
-
它提供一个clang-format-diff.py脚本,用来格式化patch,code review提交代码
配置文件说明
-
配置文件.clang-format详细说明
# 基于那个配置文件
BasedOnStyle: LLVM
# 访问说明符的偏移(public private)
AccessModifierOffset: -4
# 括号之后,水平对齐参数: Align DontAlign AlwaysBreak
AlignAfterOpenBracket: Align
# 连续的赋值时,对齐所有的等号
AlignConsecutiveAssignments: true
# 连续声明时,对齐所有声明的变量名
AlignConsecutiveDeclarations: true
# 左对齐换行(使用反斜杠换行)的反斜杠
AlignEscapedNewlinesLeft: true
# 水平对齐二元和三元表达式的操作数
AlignOperands: true
# 对齐连续的尾随的注释
AlignTrailingComments: true
# 允许函数声明的所有参数在放在下一行
AllowAllParametersOfDeclarationOnNextLine: true
# 允许短的块放在同一行
AllowShortBlocksOnASingleLine : false
# 允许短的case标签放在同一行
AllowShortCaseLabelsOnASingleLine: false
# 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), All
AllowShortFunctionsOnASingleLine: Empty
# 是否允许短if单行 If true, if (a) return; 可以放到同一行
AllowShortIfStatementsOnASingleLine: false
# 允许短的循环保持在同一行
AllowShortLoopsOnASingleLine: false
# 总是在定义返回类型后换行(deprecated)
AlwaysBreakAfterDefinitionReturnType: None
# 每行字符的限制,0表示没有限制
ColumnLimit: 100
# 描述具有特殊意义的注释的正则表达式,它不应该被分割为多行或以其它方式改变
CommentPragmas: '^ IWYU pragma:'
# 语言: None Cpp Java Objc Protp
Language: Cpp
#指针的*的挨着哪边
PointerAlignment: Right
#缩进宽度
IndentWidth: 4
# 连续的空行保留几行
MaxEmptyLinesToKeep: 1
# 在 @property 后面添加空格, \@property (readonly) 而不是 \@property(readonly).
ObjCSpaceAfterProperty: true
# OC block后面的缩进
ObjCBlockIndentWidth: 4
# 是否允许短方法单行
AllowShortFunctionsOnASingleLine: false
# 换行的时候对齐操作符
#AlignOperands: true
# 中括号两边空格 []
SpacesInSquareBrackets: true
# 小括号两边添加空格
SpacesInParentheses : false
#等号两边的空格
SpaceBeforeAssignmentOperators: true
# 容器类的空格 例如 OC的字典
SpacesInContainerLiterals: true
#缩进
IndentWrappedFunctionNames: true
#在block从空行开始
KeepEmptyLinesAtTheStartOfBlocks: true
#在构造函数初始化时按逗号断行,并以冒号对齐
BreakConstructorInitializersBeforeComma: true
#括号后添加空格
SpaceAfterCStyleCast: false
# 允许排序#include, 造成编译错误
# SortIncludes: true
# 缩进case 标签
IndentCaseLabels: true
#tab键盘的宽度
TabWidth: 4
UseTab: Never
QtCreator下的使用
QtCreator下默认只会格式化C++代码,如果要格式化C代码,需要在Restrict to MIME types
中添加C源文件的MIME类型 text/x-csrc
。
BasedOnStyle: LLVM
ObjCBlockIndentWidth: 4
IndentWidth: 4
TabWidth: 4
AccessModifierOffset: -4
ColumnLimit: 120
AllowShortFunctionsOnASingleLine: false
# 函数后的大括号换行
# BreakBeforeBraces: Custom
# BraceWrapping:
# AfterFunction: true
# 模板声明后换行
AlwaysBreakTemplateDeclarations: true
# 是否允许短if单行 If true, if (a) return; 可以放到同一行
AllowShortIfStatementsOnASingleLine: true
# 短句 while (true) continue; 能被放到单行。
AllowShortLoopsOnASingleLine: true
对于不需要格式化的地方,加上下面两行注释即可。
// clang-format off
QVector3D cubePositions[] = {
QVector3D(0.0f, 0.0f, 0.0f),
QVector3D(2.0f, 5.0f, -15.0f),
QVector3D(-1.5f, -2.2f, -2.5f),
QVector3D(-3.8f, -2.0f, -12.3f),
QVector3D(2.4f, -0.4f, -3.5f),
QVector3D(-1.7f, 3.0f, -7.5f),
QVector3D(1.3f, -2.0f, -2.5f),
QVector3D(1.5f, 2.0f, -2.5f),
QVector3D(1.5f, 0.2f, -1.5f),
QVector3D(-1.3f, 1.0f, -1.5f)
};
// clang-format on
VS Code下的使用
进入 文件->首选项->设置 页面,然后搜索 clang。
"C_Cpp.clang_format_fallbackStyle": "LLVM"
"C_Cpp.clang_format_style": "file"
然后在源码目录创建.clang-format
文件,将之前的格式设置复制粘贴进去保存即可。
Git
中文乱码的问题
原因在默认设置下,中文文件名在工作区状态输出,中文名不能正确显示,而是显示为八进制的字符编码。
解决办法:将git 配置文件 core.quotepath项设置为false。quotepath表示引用路径, 加上--global表示全局配置
git bash 终端输入命令:
git config --global core.quotepath false
将编辑器设置为VIM
git config --global core.editor vim
双系统
时间不一致
sudo apt install ntpdate
sudo ntpdate time.windows.com
sudo hwclock --localtime --systohc
安装Nvidia驱动
禁用 Nouveau Nvidia 驱动
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
# 重新生成kernel initramfs
sudo update-initramfs -u
# 然后必须重启。
sudo reboot now
重启后需要进入tty模式安装显卡驱动。
sudo telinit 3
./NVIDIA-Linux-x86_64-390.87.run
驱动安装完成后,重启。然后可安装如下两个软件,进行显卡之间的切换。
sudo apt install nvidia-prime nvidia-prime-applet
生成公私/钥
在日常开发中,或多或少都会使用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
VS code
在项目下新建.vscode/settings.json
,建议填入如下内容:
{
"editor.formatOnSave": true,
"editor.formatOnSaveMode": "modificationsIfAvailable",
"files.exclude": { // 隐藏文件夹
"calibration":true, // 根目录下的calibration目录
"canbus":true // 根目录下的canbus目录
}
}
ctrl + shift + p
在设置页面搜索enablePreview
,取消选择。使得打开文件会重开一个新的窗口。
在 File → Preferences → Settings → Window → Title Bar Style 选择 "window.titleBarStyle": "custom"
以显示VS Code自定义标题栏,这在Ubuntu下尤其有用。
关闭右侧滚动条旁的缩略图:editor.minimap.enabled: false
。
Remote - SSH
使用 Remote - SSH 能够很方便的在 VS Code 下访问远端主机。安装好插件之后,
编辑 ssh 配置文件 ~/.ssh/config
(Windows下一般为 C:\Users\your_account\.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,除非服务器配置了不同的端口。
GitLens
GitLens — Git supercharged:这个插件可以在每一行查看commit记录。
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图形
选项。