开源项目 hermetic_cc_toolchain
使用教程
1. 项目的目录结构及介绍
hermetic_cc_toolchain
是一个用于 Bazel 构建系统的 C++ 工具链项目,旨在提供一个完全隔离的编译环境。以下是项目的目录结构及其介绍:
hermetic_cc_toolchain/
├── ci/ # CI 配置文件和脚本
├── examples/ # 示例项目和使用案例
├── tools/ # 辅助工具和脚本
├── WORKSPACE # Bazel 工作区文件
├── BUILD # Bazel 构建文件
├── README.md # 项目说明文档
└── ... # 其他配置和源代码文件
ci/
:包含持续集成(CI)的配置文件和脚本,用于自动化测试和部署。examples/
:提供一些示例项目和使用案例,帮助用户理解和使用该工具链。tools/
:包含辅助工具和脚本,用于项目的构建和测试。WORKSPACE
:Bazel 工作区文件,定义项目的外部依赖和工具链配置。BUILD
:Bazel 构建文件,定义项目的构建规则和目标。README.md
:项目的说明文档,包含项目的基本信息、安装和使用指南。
2. 项目的启动文件介绍
项目的启动文件主要是 WORKSPACE
文件,它负责定义项目的外部依赖和工具链配置。以下是 WORKSPACE
文件的关键部分:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
HERMETIC_CC_TOOLCHAIN_VERSION = "v3.1.0"
http_archive(
name = "hermetic_cc_toolchain",
sha256 = "df091afc25d73b0948ed371d3d61beef29447f690508e02bc24e7001ccc12d38",
urls = [
"https://mirror.bazel.build/github.com/uber/hermetic_cc_toolchain/releases/download/{0}/hermetic_cc_toolchain-{0}.tar.gz".format(HERMETIC_CC_TOOLCHAIN_VERSION),
"https://github.com/uber/hermetic_cc_toolchain/releases/download/{0}/hermetic_cc_toolchain-{0}.tar.gz".format(HERMETIC_CC_TOOLCHAIN_VERSION),
],
)
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
:加载 Bazel 的 HTTP 归档规则。HERMETIC_CC_TOOLCHAIN_VERSION
:定义工具链的版本。http_archive
:定义工具链的下载地址和校验和。
3. 项目的配置文件介绍
项目的配置文件主要包括 BUILD
文件和 bazelrc
文件。以下是 BUILD
文件的关键部分:
package(default_visibility = ["//visibility:public"])
load("@hermetic_cc_toolchain//:toolchain.bzl", "hermetic_cc_toolchain")
hermetic_cc_toolchain(
name = "hermetic_cc_toolchain",
toolchain_version = HERMETIC_CC_TOOLCHAIN_VERSION,
)
package(default_visibility = ["//visibility:public"])
:设置包的默认可见性。load("@hermetic_cc_toolchain//:toolchain.bzl", "hermetic_cc_toolchain")
:加载工具链定义。hermetic_cc_toolchain
:定义工具链的名称和版本。
bazelrc
文件用于配置 Bazel 的行为,以下是关键部分:
build --incompatible_enable_cc_toolchain_resolution
build --repo_env=HERMETIC_CC_TOOLCHAIN_CACHE_PREFIX=/path/to/cache
build --sandbox_add_mount_pair=/path/to/cache
build --incompatible_enable_cc_toolchain_resolution
:启用 C++ 工具链解析。