本文档描述了 Dear ImGui 中使用的构建系统,包括构建文件、编译选项、跨平台支持和 CI/CD 管道。它涵盖了如何在不同的平台和环境中构建核心 ImGui 库及其示例应用程序。本文档侧重于用于编译和测试代码库的技术基础设施,而不是运行时架构(请参阅 核心架构)或集成过程(请参阅 集成指南)。
Dear ImGui 的设计宗旨是高度可移植,依赖性最小。该库本身由几个核心 C++ 文件组成,可以轻松地添加到任何项目中。构建系统有意地保持简单和灵活,支持广泛的平台、编译器和图形 API。
来源:.github/workflows/build.yml1-568 docs/EXAMPLES.md1-236
核心的 Dear ImGui 库仅包含几个 C++ 文件,可以直接编译到您的应用程序中。在项目中使用 ImGui 不需要特殊的构建系统。
来源:examples/example_null/Makefile15-16
Dear ImGui 支持多种构建方法,以适应不同的开发环境和偏好。
最简单的方法是将 ImGui 源码文件直接添加到您的项目中
ImGui 还支持单文件构建方法,这简化了集成
来源:.github/workflows/build.yml73-83 .github/workflows/build.yml267-276
对于大多数示例应用程序,提供了跨平台的 Makefiles,这些 Makefiles 在 Linux、macOS 和 Windows(通过 MSYS2/MinGW)上均可正常工作。
来源:examples/example_null/Makefile1-93 examples/example_sdl3_opengl3/Makefile1-86
除了 Makefiles,还为各种平台提供了特定平台的构建文件
| 平台 | 构建文件 |
|---|---|
| Windows | Visual Studio 解决方案 (.sln) 和项目 (.vcxproj) |
| macOS/iOS | Xcode 项目文件 (.xcodeproj) |
| Android | Gradle 构建文件 |
| Web | Emscripten Makefiles |
来源:docs/EXAMPLES.md200-214 .github/workflows/build.yml556-557 .github/workflows/build.yml565-567
Dear ImGui 的构建系统旨在支持广泛的平台和环境。
来源:.github/workflows/build.yml19-219 .github/workflows/build.yml220-436 .github/workflows/build.yml437-507 .github/workflows/build.yml508-517 .github/workflows/build.yml518-558 .github/workflows/build.yml559-568
Dear ImGui 使用模块化的后端系统,将平台和渲染器实现分离开来。构建系统需要为您的目标平台和渲染器编译适当的后端文件。
来源:docs/BACKENDS.md38-83 examples/example_glfw_vulkan/Makefile20-21
Dear ImGui 使用 GitHub Actions 在多个平台和配置上进行持续集成和测试。
来源:.github/workflows/build.yml1-568 .github/workflows/static-analysis.yml1-47 .github/workflows/scheduled.yml1-16
build.yml):在多个平台和各种配置上构建和测试 ImGuistatic-analysis.yml):使用 PVS-Studio 执行静态代码分析scheduled.yml):每天触发构建,以确保代码库保持稳定来源:.github/workflows/build.yml3-16 .github/workflows/static-analysis.yml3-10 .github/workflows/scheduled.yml8-9
CI 管道测试广泛的构建配置
| 配置 | 描述 |
|---|---|
| 额外警告 | 启用额外编译器警告进行构建 |
| 单文件 | 测试单文件包含方法 |
| 不同的定义 | 测试各种配置选项(IMGUI_DISABLE_* 标志) |
| 平台组合 | 测试不同的平台和渲染器后端组合 |
| 编译器版本 | 使用不同的编译器和 C++ 标准进行测试 |
| DLL 构建 | 测试将 ImGui 构建为 DLL/共享库 |
来源: .github/workflows/build.yml48-49 .github/workflows/build.yml72-83 .github/workflows/build.yml303-363
Dear ImGui 提供了多种方式来自定义构建过程以满足您的需求。
自定义 ImGui 最常见的方式是通过 imconfig.h 文件,该文件允许您定义影响 ImGui 编译方式的各种选项。或者,您也可以在构建系统中定义这些选项。
CI 流水线中测试的一些配置选项示例
| 选项 | 目的 |
|---|---|
IMGUI_DISABLE_OBSOLETE_FUNCTIONS | 禁用已弃用的函数 |
IMGUI_DISABLE_FILE_FUNCTIONS | 移除文件 I/O 功能 |
IMGUI_DISABLE_DEMO_WINDOWS | 移除演示窗口代码以减小二进制文件大小 |
IMGUI_DISABLE_WIN32_FUNCTIONS | 禁用 Win32 特定的函数 |
IMGUI_USE_WCHAR32 | 使用 32 位字符而不是 16 位字符 |
IMGUI_USE_BGRA_PACKED_COLOR | 使用 BGRA 颜色格式而不是 RGBA |
来源: .github/workflows/build.yml84-95 .github/workflows/build.yml339-362 .github/workflows/build.yml303-314
虽然 Dear ImGui 通常用作静态库,但 CI 流水线也测试将其构建为 DLL/共享库
来源: .github/workflows/build.yml51-63 .github/workflows/build.yml97-112
该存储库包含众多示例应用程序,演示了如何将 ImGui 与不同的平台和图形 API 配合使用。每个示例都有自己的构建文件。
来源: docs/EXAMPLES.md51-196 .github/workflows/build.yml113-219
example_null 应用程序对于 CI 测试尤为重要,因为它提供了一个最小化的、无头化的环境,用于测试核心 ImGui 功能,而无需任何图形输出或用户交互。
来源: examples/example_null/Makefile5-7 docs/EXAMPLES.md110-115
在将 Dear ImGui 集成到您自己的项目中时,请考虑以下最佳实践:
来源: docs/EXAMPLES.md197-214 docs/BACKENDS.md106-117
常见的构建问题及解决方案
| 问题 | 解决方案 |
|---|---|
| 缺少依赖项 | 确保您已安装所需的库(GLFW、SDL2 等)。 |
| 编译器版本 | ImGui 使用 C++11 功能,请确保您的编译器支持它们。 |
| 后端冲突 | 确保您为平台使用了兼容的后端。 |
| 链接错误 | 检查您是否包含了所有必需的 ImGui 源文件。 |
| DLL 问题 | 使用 DLL 构建时,请确保定义了正确的导入/导出宏。 |
来源: .github/workflows/build.yml27-36 .github/workflows/build.yml225-228 examples/example_null/Makefile20