本文档提供了关于 GPT4All 项目的开发工作流程、构建系统配置、持续集成管道、打包过程和特定平台部署考量的技术细节。有关构建系统依赖项的信息,请参阅 依赖项与子模块。
GPT4All 使用 CMake 作为其主要构建系统,在 gpt4all-chat 目录中有一个主配置文件,该文件协调跨所有支持平台的构建过程。
来源:gpt4all-chat/CMakeLists.txt1-92 gpt4all-chat/CMakeLists.txt395-414
构建系统提供了多种配置选项来定制构建过程
| 选项 | 描述 | 默认 |
|---|---|---|
GPT4ALL_TEST | 构建测试套件 | 如果找到 Python 3.12+,则为 ON |
GPT4ALL_LOCALHOST | 为本地主机存储库构建安装程序 | OFF |
GPT4ALL_OFFLINE_INSTALLER | 构建完全离线的安装程序 | OFF |
GPT4ALL_SIGN_INSTALL | 对已安装的二进制文件和安装程序进行签名 | OFF |
GPT4ALL_USE_QTPDF | 为 LocalDocs 使用 QtPDF(否则使用 PDFium) | AUTO |
BUILD_UNIVERSAL(仅限 macOS) | 构建通用二进制文件(arm64+x86_64) | OFF |
GPT4ALL_FORCE_D3D12(Windows) | 使用 Direct3D 12 进行渲染 | AUTO |
来源:gpt4all-chat/CMakeLists.txt31-39 gpt4all-chat/CMakeLists.txt95-139
构建系统创建多个二进制目标以支持各种硬件加速选项
来源:gpt4all-chat/CMakeLists.txt480-501
GPT4All 使用 CircleCI 进行持续集成和部署,并使用基于路径的过滤来优化构建资源使用。
CI/CD 管道在两个关键文件中配置
.circleci/config.yml - 路径过滤配置.circleci/continue_config.yml - 主要构建工作流程定义管道由特定目录中的更改触发
来源:.circleci/config.yml1-23 .circleci/continue_config.yml8-45
CI/CD 系统为多个平台构建和打包 GPT4All
来源:.circleci/continue_config.yml98-557
GPT4All 使用 CPack 和 Qt Installer Framework (IFW) 为所有支持的平台创建安装程序。
来源:gpt4all-chat/CMakeLists.txt469-593 .circleci/continue_config.yml234-247
构建系统支持创建两种类型的安装程序
来源:gpt4all-chat/CMakeLists.txt605-622
每个平台在部署阶段都需要特殊处理
macdeployqt 复制 Qt 依赖项BUILD_UNIVERSAL=ON 时,构建 ARM 和 Intel 的通用二进制文件来源:gpt4all-chat/cmake/deploy-qt-mac.cmake.in1-27 gpt4all-chat/CMakeLists.txt565-578
windeployqt 复制 Qt 依赖项来源:gpt4all-chat/CMakeLists.txt570-572
linuxdeployqt 解析依赖项来源:gpt4all-chat/CMakeLists.txt563-567
GPT4All 对 macOS 和 Windows 平台都实现了代码签名。
当 GPT4ALL_SIGN_INSTALL=ON 时,构建系统会
来源:gpt4all-chat/CMakeLists.txt414-436 gpt4all-chat/CMakeLists.txt508-515 .circleci/continue_config.yml227-247
当 Windows 的 GPT4ALL_SIGN_INSTALL=ON 时
来源:gpt4all-chat/CMakeLists.txt517-524
GPT4All 支持通过 Qt 的翻译系统支持多种语言。
来源:gpt4all-chat/CMakeLists.txt381-390 gpt4all-chat/src/main.cpp119-129
GPT4All 项目包含一个可以通过 GPT4ALL_TEST 选项启用的测试框架。
来源:gpt4all-chat/CMakeLists.txt150-175
GPT4All 项目维护着一个记录所有发布的更改日志。版本号遵循语义化版本控制方案(主版本号.次版本号.修订号)
来源:gpt4all-chat/CMakeLists.txt5-11 gpt4all-chat/CHANGELOG.md1-336
GPT4All 实现了一个单实例应用程序机制,以防止多个副本运行
来源: gpt4all-chat/src/main.cpp87-94
这个全面的构建和部署系统使 GPT4All 能够支持多种平台、架构和部署场景,同时保持一致的用户体验。