本页介绍了如何从源代码安装 Bazel,并提供了有关常见问题的排查提示。
如需从源代码构建 Bazel,您可以执行以下任一操作:
- 在没有现有 Bazel 二进制文件的情况下构建,这称为引导。 
使用 Bazel 构建 Bazel
摘要
- 从 GitHub 发布页面或使用 Bazelisk 获取最新的 Bazel 版本。 
- 从 GitHub 下载 Bazel 的源代码,并将其提取到某个位置。 或者,您也可以从 https://github.com/bazelbuild/bazel 克隆源代码树 
- 安装与引导启动相同的必备条件(请参阅针对类 Unix 系统的说明或针对 Windows 的说明) 
- 使用 Bazel 构建 Bazel 的开发 build: - bazel build //src:bazel-dev(或 Windows 上的- bazel build //src:bazel-dev.exe)
- 生成的二进制文件位于 - bazel-bin/src/bazel-dev(或 Windows 上的- bazel-bin\src\bazel-dev.exe)。您可以将其复制到任意位置,并立即使用,无需进一步安装。
详细说明如下。
第 1 步:获取最新的 Bazel 版本
目标:安装或下载发布版 Bazel。确保您可以在终端中输入 bazel 来运行它。
原因:如需从 GitHub 源代码树构建 Bazel,您需要预先存在的 Bazel 二进制文件。您可以从软件包管理器安装一个,也可以从 GitHub 下载一个。请参阅安装 Bazel。(或者,您也可以从头开始构建(引导)。)
问题排查:
- 如果您无法通过在终端中输入 - bazel来运行 Bazel,请执行以下操作:- 可能是 Bazel 二进制文件的目录不在 PATH 中。 - 这不是什么大问题。您需要输入完整路径,而不是输入 - bazel。
- 可能 Bazel 二进制文件本身不称为 - bazel(在 Unix 上)或- bazel.exe(在 Windows 上)。- 这不是什么大问题。您可以重命名二进制文件,也可以输入二进制文件的名称,而不是 - bazel。
- 可能是二进制文件不可执行(在 Unix 上)。 - 您必须运行 - chmod +x /path/to/bazel,将该二进制文件转为可执行文件。
 
第 2 步:从 GitHub 下载 Bazel 的源代码
如果您熟悉 Git,只需运行 git clone https://github.com/bazelbuild/bazel
否则:
- 将内容提取到某个位置。 - 例如,在主目录下创建一个 - bazel-src目录,然后将文件提取到该目录中。
第 3 步:安装前提条件
安装与引导加载程序相同的必备项(见下文)- JDK、C++ 编译器、MSYS2(如果您在 Windows 上构建)等。
第 4a 步:在 Ubuntu Linux、macOS 和其他类 Unix 系统上构建 Bazel
如需了解 Windows 的相关说明,请参阅在 Windows 上构建 Bazel。
目标:运行 Bazel 以构建自定义 Bazel 二进制文件 (bazel-bin/src/bazel-dev)。
说明:
- 启动 Bash 终端 
- 使用 - cd进入您提取(或克隆)Bazel 源代码的目录。- 例如,如果您将源代码提取到主目录下,请运行: - cd ~/bazel-src
- 从源代码构建 Bazel: - bazel build //src:bazel-dev- 或者,您也可以运行 - bazel build //src:bazel --compilation_mode=opt来生成较小的二进制文件,但 build 速度会较慢。- 您可以使用 - --stamp --embed_label=X.Y.Z标志进行构建,以嵌入二进制文件的 Bazel 版本,从而使- bazel --version输出指定版本。
- 输出将位于 - bazel-bin/src/bazel-dev(或- bazel-bin/src/bazel)。
第 4b 步:在 Windows 上构建 Bazel
如需了解类 Unix 系统的相关说明,请参阅 Ubuntu Linux、macOS 和其他类 Unix 系统。
目标:运行 Bazel 以构建自定义 Bazel 二进制文件 (bazel-bin\src\bazel-dev.exe)。
说明:
- 启动命令提示符(“开始”菜单 >“运行”>“cmd.exe”) 
- 使用 - cd进入您提取(或克隆)Bazel 源代码的目录。- 例如,如果您将源代码提取到主目录下,请运行: - cd %USERPROFILE%\bazel-src
- 从源代码构建 Bazel: - bazel build //src:bazel-dev.exe - 或者,您也可以运行 - bazel build //src:bazel.exe --compilation_mode=opt来生成较小的二进制文件,但 build 速度会较慢。- 您可以使用 - --stamp --embed_label=X.Y.Z标志进行构建,以嵌入二进制文件的 Bazel 版本,从而使- bazel --version输出指定版本。
- 输出将位于 - bazel-bin\src\bazel-dev.exe(或- bazel-bin\src\bazel.exe)。
第 5 步:安装构建的二进制文件
实际上,无需安装任何内容。
上一步的输出是一个独立的 Bazel 二进制文件。您可以将其复制到任何目录,并立即使用。(如果该目录位于您的 PATH 中,则非常有用,这样您就可以在任何位置运行“bazel”了。)
从头开始构建 Bazel(引导)
您还可以从头开始构建 Bazel,而无需使用现有的 Bazel 二进制文件。
第 1 步:下载 Bazel 的源代码(分发归档文件)
(此步骤适用于所有平台。)
- 从 GitHub 下载 - bazel-<version>-dist.zip,例如- bazel-0.28.1-dist.zip。- 注意: - 有一个独立于架构的单个分发归档文件。没有特定于架构或特定于操作系统的分发归档文件。
- 这些来源与 GitHub 源代码树不同。您必须使用分发归档来引导启动 Bazel。您无法使用从 GitHub 克隆的源树。(分发归档文件包含引导所需的已生成源文件,这些文件不属于正常的 Git 源树。)
 
- 将分发归档解压缩到磁盘上的某个位置。 - 您应验证由 Bazel 的发布密钥 3D5919B448457EE0 生成的签名。 
第 2a 步:在 Ubuntu Linux、macOS 和其他类 Unix 系统上引导启动 Bazel
如需查看 Windows 说明,请参阅在 Windows 上引导 Bazel。
2.1. 安装前提条件
- Bash 
- zip、unzip 
- C++ build 工具链 
- JDK。必须使用版本 21。 
- Python。支持版本 2 和 3,安装其中一个即可。 
例如,在 Ubuntu Linux 上,您可以使用以下命令安装这些要求:
sudo apt-get install build-essential openjdk-21-jdk python zip unzip
2.2. 在 Unix 上引导 Bazel
- 打开 shell 或终端窗口。 
- cd到您解压缩分发归档文件的目录。
- 运行编译脚本: - env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" bash ./compile.sh。
编译后的输出会放入 output/bazel 中。这是一个不含嵌入式 JDK 的独立 Bazel 二进制文件。您可以将其复制到任何位置,也可以就地使用。为方便起见,请将此二进制文件复制到 PATH 上的某个目录(例如 Linux 上的 /usr/local/bin)。
如需以可重现的方式构建 bazel 二进制文件,请在“运行编译脚本”步骤中设置 SOURCE_DATE_EPOCH。
第 2b 步:在 Windows 上引导 Bazel
如需了解类 Unix 系统的相关说明,请参阅在 Ubuntu Linux、macOS 和其他类 Unix 系统上引导启动 Bazel。
2.1. 安装前提条件
- 用于压缩和解压缩的 MSYS2 软件包。在 MSYS2 shell 中运行以下命令: - pacman -S zip unzip patch
- Visual C++ 编译器。安装 Visual C++ 编译器,可以将其作为 Visual Studio 2015 或更高版本的一部分进行安装,也可以通过安装最新的 Build Tools for Visual Studio 2017 进行安装。 
- JDK。必须使用版本 21。 
- Python。支持版本 2 和 3,安装其中一个即可。您需要 Windows 原生版本(可从 https://www.python.org 下载)。通过 MSYS2 中的 pacman 安装的版本将无法正常运行。 
2.2. 在 Windows 上引导 Bazel
- 打开 MSYS2 shell。 
- 设置以下环境变量: - BAZEL_VS或- BAZEL_VC(两者不相同):设置为 Visual Studio 目录 (BAZEL_VS) 或 Visual C++ 目录 (BAZEL_VC) 的路径。设置其中一个就足够了。
- BAZEL_SH:MSYS2- bash.exe的路径。请参阅以下示例中的命令。- 请勿将其设置为 - C:\Windows\System32\bash.exe。(如果您安装了适用于 Linux 的 Windows 子系统,则拥有该文件。)Bazel 不支持此版本的- bash.exe。
- PATH:添加 Python 目录。
- JAVA_HOME:设置为 JDK 目录。
 - 示例(使用 BAZEL_VS): - export BAZEL_VS="C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools" export BAZEL_SH="$(cygpath -m $(realpath $(which bash)))" export PATH="/c/python27:$PATH" export JAVA_HOME="C:/Program Files/Java/jdk-21"- 或(使用 BAZEL_VC): - export BAZEL_VC="C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC" export BAZEL_SH="$(cygpath -m $(realpath $(which bash)))" export PATH="/c/python27:$PATH" export JAVA_HOME="C:/Program Files/Java/jdk-21"
- cd到您解压缩分发归档文件的目录。
- 运行编译脚本: - env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" ./compile.sh
编译后的输出会放入 output/bazel.exe 中。这是一个不含嵌入式 JDK 的独立 Bazel 二进制文件。您可以将其复制到任何位置,也可以就地使用。为方便起见,请将此二进制文件复制到 PATH 上的某个目录。
如需以可重现的方式构建 bazel.exe 二进制文件,请在“运行编译脚本”步骤中设置 SOURCE_DATE_EPOCH。
您无需从 MSYS2 shell 运行 Bazel。您可以从命令提示符 (cmd.exe) 或 PowerShell 运行 Bazel。