菜单

构建系统

相关源文件

目的与范围

本文档描述了 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 源码文件直接添加到您的项目中

  1. 将核心 ImGui 源码文件(imgui.cpp、imgui_draw.cpp 等)添加到您的构建中
  2. 添加您需要的任何后端实现文件(例如,imgui_impl_win32.cpp、imgui_impl_dx11.cpp)
  3. 设置 ImGui 目录的包含路径

单文件构建

ImGui 还支持单文件构建方法,这简化了集成

来源:.github/workflows/build.yml73-83 .github/workflows/build.yml267-276

Makefiles

对于大多数示例应用程序,提供了跨平台的 Makefiles,这些 Makefiles 在 Linux、macOS 和 Windows(通过 MSYS2/MinGW)上均可正常工作。

来源:examples/example_null/Makefile1-93 examples/example_sdl3_opengl3/Makefile1-86

特定平台构建文件

除了 Makefiles,还为各种平台提供了特定平台的构建文件

平台构建文件
WindowsVisual Studio 解决方案 (.sln) 和项目 (.vcxproj)
macOS/iOSXcode 项目文件 (.xcodeproj)
AndroidGradle 构建文件
WebEmscripten 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

CI/CD 流水线

Dear ImGui 使用 GitHub Actions 在多个平台和配置上进行持续集成和测试。

来源:.github/workflows/build.yml1-568 .github/workflows/static-analysis.yml1-47 .github/workflows/scheduled.yml1-16

工作流类型

  1. 主构建工作流build.yml):在多个平台和各种配置上构建和测试 ImGui
  2. 静态分析static-analysis.yml):使用 PVS-Studio 执行静态代码分析
  3. 计划构建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 作为 DLL/共享库

虽然 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

示例 Null

example_null 应用程序对于 CI 测试尤为重要,因为它提供了一个最小化的、无头化的环境,用于测试核心 ImGui 功能,而无需任何图形输出或用户交互。

来源: examples/example_null/Makefile5-7 docs/EXAMPLES.md110-115

最佳实践

在将 Dear ImGui 集成到您自己的项目中时,请考虑以下最佳实践:

  1. 直接文件包含:对于大多数项目,将 ImGui 源文件直接包含到您的构建中是最简单的方法。
  2. 后端选择:为您的应用程序选择合适的平台和渲染器后端。
  3. 配置自定义:使用 imconfig.h 或构建定义来为您的需求自定义 ImGui。
  4. 最小依赖:ImGui 的设计理念是具有最小的依赖性,请保持这一优势。
  5. 版本控制:更新 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