2、开发环境搭建:Qt Creator安装与配置、交叉编译工具链搭建、模拟器与真机调试环境准备、版本控制(Git)工作流
好,咱们正式开始动手了。这一章,说白了就是给你的电脑“武装”起来。我见过太多人,代码写得飞起,结果环境配了三天,心态直接崩了。别急,跟着我的节奏来,一步步把坑填平。
2.1 Qt Creator安装与配置
Qt Creator,是我们写界面代码的主战场。我个人习惯用开源版,功能完全够用,没必要花冤枉钱。
安装步骤:
- 去Qt官网下载在线安装器。注意选对操作系统版本。
- 运行安装器时,组件选择要精打细算。我建议只勾选:
- Qt 5.15.x 或 Qt 6.x(根据你的项目需求)
- 对应的编译器(MinGW 或 MSVC)
- Qt Charts、Qt Quick 等常用模块 - 安装路径不要有中文和空格。嗯,这里要注意,否则后面编译会出一些莫名其妙的问题。
我的小技巧: 安装完成后,第一时间去「工具」→「选项」→「环境」里,把界面语言改成中文。别问我为什么,调试报错时看中文提示能省一半时间。
配置要点:
- 在「工具」→「选项」→「构建和运行」里,检查编译器、调试器是否自动检测到了。如果没检测到,手动添加路径。
- 设置默认构建目录:我习惯用
build-项目名-编译器名的格式,方便区分不同平台的编译产物。
2.2 交叉编译工具链搭建
车载系统,说白了就是嵌入式Linux。你的代码在电脑上跑得再欢,也得编译成ARM架构的二进制才能上车机。这就是交叉编译。
我在项目中遇到过最头疼的事,就是工具链版本不匹配。车机系统是Ubuntu 18.04,结果我下了个20.04的工具链,链接时各种符号找不到。
搭建步骤:
- 从芯片厂商(如NXP、TI、瑞萨)官网下载对应的交叉编译工具链。别去第三方网站乱下,我曾经吃过亏,工具链里被人植入了挖矿脚本。
- 解压到
/opt目录下,例如/opt/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf。 - 配置环境变量。在
~/.bashrc里添加:
export PATH=/opt/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin:$PATH
export CROSS_COMPILE=arm-none-linux-gnueabihf-
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
然后 source ~/.bashrc 使其生效。
避坑指南: 我曾经因为忘记给工具链目录加执行权限,导致编译时提示「Permission denied」,折腾了半小时才发现。记得
chmod +x 一下。
验证是否成功:
arm-none-linux-gnueabihf-gcc --version
如果能看到版本信息,说明工具链已经就绪。
2.3 模拟器与真机调试环境准备
你想想看,每次改个按钮颜色都要烧录到车机上测试,那效率得多低?所以模拟器是必须的。但模拟器跑得再好,也替代不了真机。我有个同事,模拟器上界面完美,一上真机字体全糊了——因为车机屏幕DPI和电脑不一样。
模拟器环境:
- Qt Creator自带模拟器,但性能一般。我推荐用QEMU模拟ARM架构的板子。
- 安装QEMU:
sudo apt install qemu-system-arm - 下载对应车机系统的镜像文件(如Buildroot或Yocto生成的rootfs)。
- 启动命令示例:
qemu-system-arm -M virt -kernel zImage -drive file=rootfs.ext4,format=raw -append "root=/dev/vda" -netdev user,id=net0 -device virtio-net-device,netdev=net0
真机调试环境:
- 车机通过USB或以太网连接到开发电脑。我习惯用网线直连,稳定且速度快。
- 在车机上开启SSH服务,并确保开发电脑能ping通车机IP。
- 在Qt Creator中配置「设备」:
- 工具 → 选项 → 设备 → 添加 → 通用Linux设备
- 填写IP、用户名(通常是root)、密码 - 配置构建套件(Kit):选择交叉编译器,并关联刚才添加的设备。
调试小技巧: 第一次连接真机时,记得在车机上执行
killall gdbserver 清理残留进程,否则端口冲突会让你抓狂。
2.4 版本控制(Git)工作流
做车载项目,团队协作是常态。没有Git,你想想看,代码怎么管理?我曾经见过一个团队用U盘拷代码,版本号靠文件名后缀「_最终版」「_最终版2」「_打死不改版」……嗯,那画面太美我不敢看。
Git工作流建议:
- 主分支(main/master): 只存放稳定版本,每次提交必须经过Code Review。
- 开发分支(develop): 日常开发的主战场,所有功能分支从这里拉出。
- 功能分支(feature/xxx): 每个新功能一个分支,开发完成后合并回develop。
- 修复分支(hotfix/xxx): 线上紧急Bug,直接从main拉出,修复后合并回main和develop。
常用命令速查:
| 场景 | 命令 |
|---|---|
| 克隆远程仓库 | git clone git@github.com:your/project.git |
| 创建并切换到新分支 | git checkout -b feature/add-volume-control |
| 查看当前状态 | git status |
| 提交代码 | git add . && git commit -m "feat: 添加音量控制功能" |
| 推送到远程 | git push origin feature/add-volume-control |
| 合并分支 | git checkout develop && git merge feature/add-volume-control |
提交信息规范: 我要求团队必须用
type: 描述 的格式。例如 feat: 新增音量控制、fix: 修复音量滑块卡顿、docs: 更新API文档。这样看git log一目了然。
.gitignore 配置: 别把编译产物提交到仓库里。我见过有人把整个build目录都push上去了,仓库瞬间几百兆。以下是我常用的模板:
# 编译产物
build/
*.o
*.a
*.so
# IDE配置
.pro.user
.cbproj
.idea/
# 系统文件
.DS_Store
Thumbs.db
好了,环境搭建这块就这些。说白了,就是装软件、配路径、设环境、管代码。每一步都有坑,但踩过一次就记住了。下一章,咱们开始真正写代码——创建第一个Qt界面项目。