从源代码编译 Bazel

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。
报告问题 查看源代码

本页面介绍了如何从源代码安装 Bazel,并提供了常见问题的问题排查提示。

如需从源代码构建 Bazel,您可以执行以下任一操作:

使用 Bazel 构建 Bazel

总结

  1. GitHub 发布页面或使用 Bazelisk 获取最新的 Bazel 版本。

  2. 从 GitHub 下载 Bazel 的源代码并解压缩到某个位置。或者,您也可以从 https://github.com/bazelbuild/bazel 进行 Git 克隆源代码树

  3. 安装与引导相同的前提条件(请参阅针对类似 Unix 的系统Windows

  4. 使用 Bazel 构建 Bazel 的开发 build:bazel build //src:bazel-dev(在 Windows 上为 bazel build //src:bazel-dev.exe

  5. 生成的二进制文件位于 bazel-bin/src/bazel-dev(在 Windows 上为 bazel-bin\src\bazel-dev.exe)。您可以将其复制到任何目标位置并立即使用,而无需进一步安装。

详细说明如下。

第 1 步:获取最新的 Bazel 版本

目标:安装或下载 Bazel 的发布版本。请确保您可以在终端中输入 bazel 来运行它。

原因:如需从 GitHub 源代码树构建 Bazel,您需要已有 Bazel 二进制文件。您可以通过软件包管理器安装一个,也可以从 GitHub 下载一个。请参阅安装 Bazel。(或者,您可以从头开始 (bootstrap) 构建。)

问题排查

  • 如果您无法通过在终端中输入 bazel 来运行 Bazel,请执行以下操作:

    • 也许您的 Bazel 二进制文件的目录不在 PATH 中。

      这并不是什么大问题。您需要输入完整路径而不是 bazel

    • 或许 Bazel 二进制文件本身并不称为 bazel(在 Unix 系统中)或 bazel.exe(在 Windows 上)。

      这并不是什么大问题。您可以重命名二进制文件,也可以输入二进制文件的名称而不是 bazel

    • 或许二进制文件无法执行(在 Unix 上)。

      您必须运行 chmod +x /path/to/bazel,将该二进制文件转为可执行文件。

第 2 步:从 GitHub 下载 Bazel 的源代码

如果您熟悉 Git,请访问 https://github.com/bazelbuild/bazel

否则:

  1. zip 文件的形式下载最新的源代码

  2. 将内容提取到某个位置。

    例如,在您的主目录下创建一个 bazel-src 目录并将其解压缩。

第 3 步:安装前提条件

安装与引导相同的前提条件(见下文)- JDK、C++ 编译器、MSYS2(如果您在 Windows 上构建)等。

第 4a 步:在 Ubuntu Linux、macOS 和其他类似 Unix 的系统上构建 Bazel

如需了解适用于 Windows 的说明,请参阅在 Windows 上构建 Bazel

目标:运行 Bazel 以构建自定义 Bazel 二进制文件 (bazel-bin/src/bazel-dev)。

说明

  1. 启动 Bash 终端

  2. cd 提取到您提取(或克隆)Bazel 源代码的目录。

    例如,如果您在主目录下提取源代码,请运行以下命令:

    cd ~/bazel-src
    
  3. 从源代码构建 Bazel:

    bazel build //src:bazel-dev
    

    或者,您可以运行 bazel build //src:bazel --compilation_mode=opt 来生成较小的二进制文件,但构建速度会更慢。

  4. 输出将位于 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)。

说明

  1. 启动命令提示符(“开始”菜单 >“运行”>“cmd.exe”)

  2. cd 提取到您提取(或克隆)Bazel 源代码的目录。

    例如,如果您在主目录下提取源代码,请运行以下命令:

    cd %USERPROFILE%\bazel-src
    
  3. 从源代码构建 Bazel:

    bazel build //src:bazel-dev.exe
    

    或者,您可以运行 bazel build //src:bazel.exe --compilation_mode=opt 来生成较小的二进制文件,但构建速度会更慢。

  4. 输出将位于 bazel-bin\src\bazel-dev.exe(或 bazel-bin\src\bazel.exe)。

第 5 步:安装构建的二进制文件

抱歉,无需安装。

上一步的输出是一个独立的 Bazel 二进制文件。您可以将其复制到任何目录并立即使用。(如果该目录位于 PATH 中,可让您在所有位置运行“bazel”,这种做法会很有用)。


从头开始构建 Bazel(引导)

您也可以从头开始构建 Bazel,而无需使用现有的 Bazel 二进制文件。

第 1 步:下载 Bazel 的来源(分发归档)

(此步骤适用于所有平台。)

  1. GitHub 下载 bazel-<version>-dist.zip,例如 bazel-0.28.1-dist.zip

    引起注意

    • 有一个独立于架构的分发归档。没有特定于架构或操作系统的分发归档。
    • 这些源代码与 GitHub 源代码树不同。您必须使用分发归档来引导 Bazel。您不能使用从 GitHub 克隆的源代码树。(发行版归档文件包含引导所需的源代码文件,这些文件不属于常规 Git 源代码树。)
  2. 将分发归档解压缩到磁盘上。

    您应验证 Bazel 的发布密钥 3D5919B448457EE0 执行的签名。

第 2a 步:在 Ubuntu Linux、macOS 和其他类似 Unix 的系统上启动 Bazrap Bazel

有关 Windows 的说明,请参阅 Windows 上的引导 Bazel

2.1. 安装前提条件

  • Bash

  • zip、unzip

  • C++ 构建工具链

  • JDK必须提供版本 11。

  • Python。版本 2 和 3 均受支持,您只需安装其中一个版本即可。

例如,在 Ubuntu Linux 上,您可以使用以下命令安装这些要求:

sudo apt-get install build-essential openjdk-11-jdk python zip unzip

2.2. Unix 上的引导 Bazel

  1. 打开 shell 或终端窗口。

  2. cd 解压缩到解压缩分发归档的目录。

  3. 运行编译脚本:env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" bash ./compile.sh

编译后的输出被放入 output/bazel 中。这是一个独立的 Bazel 二进制文件,没有嵌入式 JDK。您可以将其复制到任何位置或就地使用。为方便起见,请将此二进制文件复制到 PATH 上的目录中(例如 Linux 上的 /usr/local/bin)。

如需以可重现的方式构建 bazel 二进制文件,还要在“运行编译脚本”步骤中设置 SOURCE_DATE_EPOCH

第 2b 步:Windows 上的引导 Bazel

如需了解类似 Unix 系统的说明,请参阅 Ubuntu Linux、macOS 和其他类似 Unix 系统的引导加载程序 Bazel

2.1. 安装前提条件

  • MSYS2 shell

  • 用于压缩和解压缩的 MSYS2 软件包。在 MSYS2 shell 中运行以下命令:

    pacman -S zip unzip patch
    
  • Visual C++ 编译器。安装 Visual C++ 编译器作为 Visual Studio 2015 或更高版本的一部分,或者安装最新的 Visual Tools 2017 Build Tools

  • JDK必须提供版本 11。

  • Python。版本 2 和 3 均受支持,您只需安装其中一个版本即可。您需要 Windows 原生版本(可从 https://www.python.org 下载)。在 MSYS2 中通过 Pacman 安装的版本不起作用。

2.2. Windows 上的引导 Bazel

  1. 打开 MSYS2 shell。

  2. 设置以下环境变量:

    • BAZEL_VSBAZEL_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/jdk1.8.0_112"
    

    或者(使用 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/jdk1.8.0_112"
    
  3. cd 解压缩到解压缩分发归档的目录。

  4. 运行编译脚本:env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" ./compile.sh

编译后的输出被放入 output/bazel.exe 中。这是一个独立的 Bazel 二进制文件,没有嵌入式 JDK。您可以将其复制到任何位置或就地使用。为方便起见,请将此二进制文件复制到 PATH 上的目录中。

如需以可重现的方式构建 bazel.exe 二进制文件,还要在“运行编译脚本”步骤中设置 SOURCE_DATE_EPOCH

您无需从 MSYS2 shell 运行 Bazel。您可以通过命令提示符 (cmd.exe) 或 PowerShell 运行 Bazel。