本项目提供了一个用于构建 Qt 应用的 Docker 容器环境。该环境预装了多种开发工具和库,支持多平台的 Qt 应用编译。
该 Docker 容器基于 ubuntu:16.04 镜像,包含以下主要组件:
- Qt 框架: 默认安装 Qt 5.15.2 版本。
- 开发工具: 包括
build-essential、g++-aarch64-linux-gnu和g++-arm-linux-gnueabihf等编译工具。 - 多平台Qt编译:支持 x86_64、ARMv7 和 AArch64 架构的Qt应用交叉编译。
- 辅助工具: 如
wget、git、vim等常用工具。 - linuxdeployqt: 用于打包 Qt 应用的工具。
若需要使用不同版本的 Qt,可以通过修改 Dockerfile 中的环境变量来实现:
-
打开 Dockerfile 文件。
-
修改
ENV QT_MAIN_VERSION和ENV QT_VERSION的值为所需的版本号。例如:ENV QT_MAIN_VERSION 5.15 ENV QT_VERSION 5.15.14
-
重新构建 Docker 容器。
在构建容器之前,请确保本地环境已安装 Docker。安装方法请参考 Docker 官方安装指南。
构建 Docker 容器的步骤如下:
-
下载或克隆本项目代码到本地。
-
打开终端,切换到包含
Dockerfile和docker-build.sh的目录。 -
执行以下命令以构建 Docker 容器:
sudo ./docker-build.sh
此脚本会自动执行 Docker 的构建过程,构建完成后,您将得到一个名为 hc_sw/qt_builder 的 Docker 镜像。
# 启动一个交互式容器,并挂载当前目录下的 `code` 目录到容器的 `/qt/code` 目录
docker run -it -v ./code:/qt/code --name qt_builder_sh hc_sw/qt_builder
# 使用run脚本创建交互式容器
./docker-run-shell.sh
# 使用start脚本启动已经存在的容器
./docker-start-shell.sh
# 新建一个shell进入正在运行的容器
docker exec -it qt_builder_sh bash可以通过容器的环境变量
QT_VERSION获取Qt版本。
QT_INSTALL_X86_DIR=/opt/Qt${QT_VERSION}/${QT_VERSION}/gcc_64
QT_INSTALL_AARCH64_DIR=/opt/Qt${QT_VERSION}/${QT_VERSION}/aarch64
QT_INSTALL_ARM_DIR=/opt/Qt${QT_VERSION}/${QT_VERSION}/arm
# 编译x86_64架构的Qt应用
QMAKE_CMD=${QT_INSTALL_X86_DIR}/bin/qmake
cd qt_example && ${QMAKE_CMD} && make -j4
# 编译ARMv7架构的Qt应用
QMAKE_CMD=${QT_INSTALL_ARM_DIR}/bin/qmake
cd qt_example && ${QMAKE_CMD} && make -j4
# 编译AArch64架构的Qt应用
QMAKE_CMD=${QT_INSTALL_AARCH64_DIR}/bin/qmake
cd qt_example && ${QMAKE_CMD} && make -j4注意:缺省的容器启动配置下仅支持运行无界面的Qt程序
# 假设编译成功的qt_example可执行程序在output目录下
QT_QPA_PLATFORM=offscreen ./output/qt_example注意:仅支持打包x86_64架构的Qt应用
# 先设置Qt环境变量
QT_INSTALL_X86_DIR=/opt/Qt${QT_VERSION}/${QT_VERSION}/gcc_64
export LD_LIBRARY_PATH=${QT_INSTALL_X86_DIR}/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=${QT_INSTALL_X86_DIR}/plugins:$QT_PLUGIN_PATH
export QML2_IMPORT_PATH=${QT_INSTALL_X86_DIR}/qml:$QML2_IMPORT_PATH
# 假设编译成功的qt_example可执行程序在output目录下
cd output && linuxdeployqt ./qt_example -appimage