Bazel 源码编译与使用教程

Bazel 源码编译与使用教程

bazela fast, scalable, multi-language and extensible build system项目地址:https://gitcode.com/gh_mirrors/ba/bazel

1. 项目介绍

Bazel 是一个由谷歌开发的构建工具,它提供了跨语言和多平台的快速、可扩展的构建能力。Bazel 支持多种编程语言,如 Java、C++、Go 和 Android/iOS 开发,通过其先进的本地和分布式缓存技术、优化的依赖分析和并行执行机制,实现高效增量构建。此外,Bazel 具有很好的可扩展性,允许添加对新语言和平台的支持。

2. 项目快速启动

安装 Bazelisk

Bazelisk 是推荐的安装方式,它可以自动管理不同版本的 Bazel。以下是常见操作系统上的安装步骤:

macOS 或 Linux(使用 Homebrew)
brew install bazelisk
Windows

Bazelisk releases 下载适用于你的操作系统的二进制文件并安装。

执行你的第一个 Bazel 命令

首先创建一个简单的项目目录结构,例如:

my_project/
  WORKSPACE
  my_app/
    main.java

WORKSPACE 文件中添加以下内容以声明项目:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "io_bazel_rules_java",
    sha256 = "sha256_hash_here",
    urls = ["https://github.com/bazelbuild/rules_java/releases/download/0.24.1/rules_java-0.24.1.tar.gz"],
)

load("@io_bazel_rules_java//java:java.bzl", "java_repositories")

java_repositories()

然后,在 main.java 文件中写入一些 Java 代码。

现在,可以运行以下命令来构建项目:

bazelisk build //my_app:main

3. 应用案例和最佳实践

  • 大型项目管理:Bazel 可用于管理和构建大规模、跨仓库或单个庞大仓库的代码。
  • 持续集成 (CI):结合 Jenkins、GitLab CI/CD 或其他自动化工具,Bazel 可确保构建的一致性和可靠性。
  • 构建缓存:利用 Bazel 的缓存机制,可以减少重复工作,加速构建速度。
  • 语言规则共享:利用社区维护的 Bazel 规则库,可以轻松支持新语言和框架。

最佳实践包括:

  • 使用明确的构建目标(targets)命名,如 //package:target_name
  • 遵循单一责任原则,保持BUILD文件简洁。
  • 对外部依赖进行版本控制,避免冲突。

4. 典型生态项目

  • TensorFlow: 著名的机器学习库,使用 Bazel 进行构建和测试。
  • Kubernetes: 高级容器编排系统,采用 Bazel 管理源码构建。
  • Istio: 微服务治理框架,使用 Bazel 实现跨语言的构建一致性。
  • Angular: Google 主导的前端开发框架,通过 Bazel 实现高效构建和测试。

更多生态项目可以在 Bazel 社区找到,这些项目展示了 Bazel 在现实世界中的广泛应用。


本文档提供了基本的 Bazel 安装和使用指南,欲了解更多详细信息,建议访问 Bazel 官方文档

bazela fast, scalable, multi-language and extensible build system项目地址:https://gitcode.com/gh_mirrors/ba/bazel

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在x86机器上使用Bazel进行交叉编译,需要进行以下几个步骤: 1. 安装交叉编译工具链。例如对于armhf架构,可以使用`sudo apt-get install crossbuild-essential-armhf`命令进行安装。 2. 在WORKSPACE文件中添加以下内容来指定交叉编译工具链路径: ``` new_local_repository( name = "armhf_compiler", path = "/usr/bin", build_file = "compiler.BUILD", exec_paths = [ "arm-linux-gnueabihf-gcc", "arm-linux-gnueabihf-g++", "arm-linux-gnueabihf-ld", "arm-linux-gnueabihf-ar", "arm-linux-gnueabihf-objdump", "arm-linux-gnueabihf-objcopy", "arm-linux-gnueabihf-nm", "arm-linux-gnueabihf-strip", ], ) ``` 然后在`compiler.BUILD`文件中定义这些工具的路径: ``` package(default_visibility = ["//visibility:public"]) filegroup( name = "binaries", srcs = [ "@armhf_compiler//arm-linux-gnueabihf-gcc", "@armhf_compiler//arm-linux-gnueabihf-g++", "@armhf_compiler//arm-linux-gnueabihf-ld", "@armhf_compiler//arm-linux-gnueabihf-ar", "@armhf_compiler//arm-linux-gnueabihf-objdump", "@armhf_compiler//arm-linux-gnueabihf-objcopy", "@armhf_compiler//arm-linux-gnueabihf-nm", "@armhf_compiler//arm-linux-gnueabihf-strip", ], ) ``` 注意将`path`指定为交叉编译工具链的路径。 3. 在`WORKSPACE`文件中添加以下内容来指定交叉编译的平台和架构: ``` load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "rules_cc", sha256 = "d8b4d9d6a99a3c5c13b6e82e1f5f3c380e6c764c7a13ecb3e9d753cdeae7c1c1", strip_prefix = "rules_cc-0.13.1", urls = ["https://github.com/bazelbuild/rules_cc/archive/0.13.1.tar.gz"], ) load("@rules_cc//cc:repositories.bzl", "cc_repositories") cc_repositories() load("@rules_cc//cc:toolchains.bzl", "register_toolchains") register_toolchains( "@rules_cc//cc/toolchain:cross_armhf", ) ``` 这里指定了交叉编译的平台为`armhf`。 4. 在`BUILD`文件中指定编译选项,例如: ``` cc_binary( name = "hello-world", srcs = ["hello-world.cc"], copts = [ "-march=armv7-a", "-mfpu=neon-vfpv4", "-mfloat-abi=hard", ], linkopts = [ "-static-libgcc", "-static-libstdc++", ], target_compatible_with = ["@rules_cc//cc:toolchain_type=//cc/toolchain:cross_armhf"], ) ``` 这里指定了编译选项为`-march=armv7-a`,`-mfpu=neon-vfpv4`和`-mfloat-abi=hard`,并且链接选项为`-static-libgcc`和`-static-libstdc++`。 5. 使用以下命令进行交叉编译: ``` bazel build --platforms=@io_bazel_rules_cc//cc/platform:linux_armhf //path/to:target ``` 这里的`//path/to:target`是你要构建的目标文件的路径。在上面的例子中,如果你要编译`hello-world`程序,那么目标就是`//:hello-world`。 希望以上步骤可以帮助你在x86机器上使用Bazel进行交叉编译
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薄正胡Plains

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值