# test-bazel **Repository Path**: posstar/test-bazel ## Basic Information - **Project Name**: test-bazel - **Description**: No description available - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-15 - **Last Updated**: 2026-02-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # test-bazel Bazel C++ 构建系统测试与示例项目集合,涵盖从基础构建到高级特性的完整实践案例。 ## 项目概述 本项目是一个 Bazel C++ 构建系统的学习和验证仓库,通过多个独立示例演示 Bazel 的核心功能和最佳实践。每个示例都针对特定的构建场景或需求进行设计,并已在实际环境中验证通过。 ## 核心需求覆盖 | 需求编号 | 需求描述 | 示例项目 | 状态 | |---------|---------|---------|------| | **DEPS-001** | C++ 模块依赖管理(头文件+库文件) | [DEPS-001](examples/DEPS-001) | ✅ 已验证 | | **DEPS-005** | 跨模块依赖支持 | [DEPS-001](examples/DEPS-001) | ✅ 已验证 | | **DEPS-006** | 传递依赖自动解析 | [DEPS-001](examples/DEPS-001) | ✅ 已验证 | | **CROSS-001** | 多平台交叉编译(ARM64/x86_64) | [CROSS-001](examples/CROSS-001) | ✅ 已验证 | | **REG-002** | 私有 BCR (Bazel Central Registry) 部署 | [REG-002](examples/REG-002) | ✅ 已验证 | | **COMPAT-005** | Apt 系统包依赖声明 | [COMPAT-005](examples/COMPAT-005) | ✅ 已验证 | | **CACHE-001** | Bazel 模块缓存机制 | [CACHE-001](examples/CACHE-001) | ✅ 已验证 | ## 示例项目列表 ### 基础示例 #### [Demo1 - Hello World](examples/demo1) 最基础的 Bazel C++ 项目,演示如何使用 Bazel 构建简单的 C++ 程序。 - **核心内容**: WORKSPACE/MODULE.bazel、BUILD 文件、cc_binary 规则 - **构建命令**: `bazel build //:hello_world` #### [Demo4 - 使用 glog 库](examples/demo4) 演示如何从 Bazel Central Registry (BCR) 引入外部依赖。 - **核心内容**: Bzlmod 依赖管理、`bazel_dep`、外部库引用 - **依赖**: glog (Google 日志库) ### 高级特性 #### [CROSS-001 - 交叉编译](examples/CROSS-001) 完整的交叉编译解决方案,支持在 x86_64/ARM64 宿主机上交叉编译出两种架构的可执行文件。 - **核心内容**: - 自定义 C++ 工具链配置(CcToolchainConfigInfo) - 多平台交叉编译(ARM64 ↔ x86_64) - 编译器警告作为错误处理 - Release 模式带调试符号 - 调试符号分离(生成独立的 `.debug` 文件) - **构建命令**: ```bash bazel build --config=arm64 //:hello_world # 编译 ARM64 版本 bazel build --config=x86_64 //:hello_world # 编译 x86_64 版本 ``` #### [DEPS-001 - 模块依赖管理](examples/DEPS-001) 演示 C++ 模块间的依赖管理,包括头文件传播、库链接和传递依赖。 - **核心内容**: - 模块化设计(libmath → libutils → app) - `cc_library` 头文件和库文件管理 - `deps` 传递依赖自动解析 - 跨模块依赖验证 - **构建命令**: `bazel build //app:main` #### [REG-002 - 私有 BCR 部署](examples/REG-002) 演示如何部署和使用私有 Bazel Central Registry,实现组织级包管理。 - **核心内容**: - 私有 BCR 目录结构 - 模块元数据配置(metadata.json、source.json) - 本地文件和 HTTP 服务器部署 - `.bazelrc` 注册中心配置 - **构建命令**: ```bash cd my-project bazel build //... ``` ### 外部工具集成 #### [Demo2 - Bazel + CMake](examples/demo2) 演示如何使用 `rules_foreign_cc` 调用 CMake 构建系统。 - **核心内容**: rules_foreign_cc、cmake 规则、外部构建系统集成 - **构建命令**: `bazel build //:hello_world_cmake` #### [Demo3 - Bazel + Conan + CMake](examples/demo3) 演示 Bazel 结合 Conan 包管理器和 CMake 的完整工作流。 - **核心内容**: - 自定义 Bazel 规则(conan_install、cmake_build) - Conan 依赖管理(fmt 库) - CMake 工具链集成 - 缓存共享机制 - **构建命令**: `bazel build //:hello` ### 系统兼容性 #### [COMPAT-005 - Apt 依赖声明](examples/COMPAT-005) 类似 rosdep 的 apt 系统包依赖声明机制。 - **核心内容**: - `apt_deps.yaml` 依赖声明 - `bazel mod graph` 解析模块依赖 - 自动 apt 包安装脚本 - **使用命令**: ```bash python3 bazel_apt_dep.py --dry-run # 查看待安装包 python3 bazel_apt_dep.py # 安装依赖 ``` #### [CACHE-001 - 模块缓存](examples/CACHE-001) Bazel 模块缓存机制验证示例。 - **核心内容**: Bazel 模块缓存、本地模块复用 ## 快速开始 ### 环境要求 - **操作系统**: Linux (Ubuntu 20.04+)、macOS、Windows (WSL2) - **Bazel**: 7.0 或更高版本 - **C++ 编译器**: GCC 7+ 或 Clang 5+(支持 C++17) ### 安装 Bazel ```bash # Ubuntu/Debian echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - sudo apt update && sudo apt install bazel # macOS brew install bazel # 验证安装 bazel --version ``` ### 运行示例 ```bash # 进入任意示例目录 cd examples/demo1 # 构建项目 bazel build //:hello_world # 运行程序 bazel run //:hello_world # 清理构建产物 bazel clean ``` ## 项目结构 ``` test-bazel/ ├── README.md # 本文件 ├── README.en.md # 英文版说明 ├── examples/ # 示例项目集合 │ ├── demo1/ # 基础 Hello World │ ├── demo2/ # Bazel + CMake │ ├── demo3/ # Bazel + Conan + CMake │ ├── demo4/ # BCR 依赖引入 │ ├── CROSS-001/ # 交叉编译 │ ├── DEPS-001/ # 模块依赖管理 │ ├── REG-002/ # 私有 BCR │ ├── COMPAT-005/ # Apt 依赖声明 │ └── CACHE-001/ # 模块缓存 └── .gitignore ``` ## 技术要点 ### Bazel 核心概念 1. **WORKSPACE / MODULE.bazel**: 定义工作区或模块,管理外部依赖 2. **BUILD / BUILD.bazel**: 定义构建目标(cc_binary、cc_library、cc_test) 3. **Bzlmod**: Bazel 的新依赖管理系统,通过 BCR 获取依赖 4. **Toolchain**: 自定义编译工具链配置,支持交叉编译 5. **Platform**: 目标平台定义(CPU、操作系统) ### 常用命令 ```bash # 构建目标 bazel build //path:target # 运行目标 bazel run //path:target # 运行测试 bazel test //... # 查看依赖图 bazel query 'deps(//path:target)' --output graph # 查看模块图 bazel mod graph # 清理构建产物 bazel clean bazel clean --expunge # 彻底清理(包括缓存) ``` ## 参考资料 - [Bazel 官方文档](https://docs.bazel.build/) - [Bazel C++ 规则](https://bazel.build/reference/be/c-cpp) - [Bazel Central Registry](https://registry.bazel.build/) - [rules_cc](https://github.com/bazelbuild/rules_cc) - [Bazel 教程:配置 C++ 工具链](https://bazel.build/tutorials/cc-toolchain-config) ## 许可证 本项目为示例项目,可自由使用。