C++ 编译速度优化:PCH、Unity Build、ccache 与 IWYU
大型 C++ 项目的编译时间常以小时计,大部分浪费在重复解析头文件上。本文从 -ftime-report 与 -ftime-trace 度量入手,讲解 IWYU 头文件治理、PCH、C++20 Modules 与 Unity Build,再谈 ccache 与 lld/mold。
tag
大型 C++ 项目的编译时间常以小时计,大部分浪费在重复解析头文件上。本文从 -ftime-report 与 -ftime-trace 度量入手,讲解 IWYU 头文件治理、PCH、C++20 Modules 与 Unity Build,再谈 ccache 与 lld/mold。
C++ 长期缺乏统一的包管理方案,第三方库往往靠手工编译、系统包管理器或 Git submodule 引入,导致构建不可复现、版本冲突频发。本文系统对比 vcpkg 与 Conan 两套主流方案:vcpkg 的 manifest 模式与注册表机制、Conan 的 conanfile 与包 ID 二进制兼容模型、锁文件与私有仓库搭建、二进制缓存加速 CI,以及与 CMake 的三种集成方式,最后给出一份可直接落地的依赖管理实践清单。
头文件包含模型是 C++ 编译速度的最大瓶颈:宏污染、前向声明迷宫、重复模板实例化。C++20 Modules 从根本上替代了头文件机制,通过显式的 export/import 接口实现真正的模块化编译隔离。本文深入 module 定义、module partition、与既有头文件的互操作策略,以及 CMake 3.28+ 对 modules 的构建支持,帮助你在大型 C++ 项目中评估和落地 Modules。
系统讲解 C++ 项目的跨平台构建矩阵:CMake Presets 统一配置、Conan/vcpkg 依赖管理、GitHub Actions 矩阵 CI,以及 ABI 兼容与符号导出的底层原理,让一个项目在 Windows/Linux/macOS 上稳定可复现。
为什么是 CMake C++ 生态长期缺乏统一的构建工具。Make 语法晦涩且难以跨平台,Ninja 需要先生成规则,各 IDE 的专属项目文件更是互不兼容。CMake 的价值在于它充当了一个「元构建系统「——用一套声明式脚本描述项目结构,再生成平台原生的构建文件(Makefile、Ninja、Vi
从零搭建完整的 GLFW+GLAD 跨平台 OpenGL 渲染项目。覆盖窗口创建、Core Profile 上下文、输入处理、HiDPI 支持、多窗口、ImGui 集成、CMake 跨平台构建与常见问题解决方案,附有完整可编译代码。
Conan是一个开源的、跨平台的、 decentralized C++ 包管理器,旨在帮助开发者管理项目的依赖关系,支持跨平台开发,并与多种构建系统集成。同时它也允许你搭建自己的私有仓库,供私有项目使用。