Bazel是什么
Bazel 是一个类似于 Make、Maven 和 Gradle 的开源构建和测试工具。 它使用人类可读的高级 build 语言。Bazel 支持 并针对多个平台构建输出。Bazel 支持 多个代码库和大量用户的大型代码库。
优势
Bazel 具有以下优势:
- 高级 build 语言。Bazel 使用直观易懂的 用于描述项目的构建属性 语义级别。与其他工具不同,Bazel 基于概念 库、二进制文件、脚本和数据集,保护您免受 编写单个调用所需的复杂程度,例如编译器和 链接程序。
- Bazel 既快速又可靠。 Bazel 会缓存之前完成的所有工作 会跟踪文件内容和构建命令的更改。这样,Bazel 知道何时需要重新构建,并仅进行重建。要进一步 您可以快速设置项目,以便在高度云环境中 并行和增量方式。
- Bazel 是多平台的。 Bazel 可在 Linux、macOS 和 Windows 上运行。Bazel 可以为多个平台(包括 桌面设备、服务器和移动设备。
- Bazel 扩缩能力。 Bazel 在处理超过 10 万项的构建时,能够保持敏捷性 源文件。它适用于多个代码库和数十个用户群 成千上万个。
- Bazel 具有可扩展性。 许多语言 而您可以扩展 Bazel 来支持 框架。
安装
https://bazel.build/install/unbuntu
使用 rules_rust
rules_rust: https://bazelbuild.github.io/rules_rust/index.html
rules_rust 定义了一组构建Rust语言的规则,比如rust_binary, rust_static_library等
Playgroud
基于之前的my-project项目,我们改用bazel来构建。
- 在my-project目录下新建WORKSPACE文件,并写入
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")# To find additional information on this release or newer ones visit:
# https://github.com/bazelbuild/rules_rust/releases
http_archive(name = "rules_rust",integrity = "sha256-Weev1uz2QztBlDA88JX6A1N72SucD1V8lBsaliM0TTg=",urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.48.0/rules_rust-v0.48.0.tar.gz"],
)load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies", "rust_register_toolchains")rules_rust_dependencies()rust_register_toolchains(edition = "2021",versions = ["1.79.0"],
)
从rules_rust规则集导入rules_rust_dependencies, rust_register_toolchains, 前者用来处理rust的依赖,后者则是定义了rust工具链。
- 新创建MODULE.bazel并写入
bazel_dep(name = "rules_rust", version = "0.48.0")
- 现在就可以rules_rust来编写构建任务了,bazel定义构建任务以软件包为粒度,在src目录下创建BUILD.bazel并写入
load("@rules_cc//cc:defs.bzl", "cc_library")
load("@rules_rust//rust:defs.bzl", "rust_binary")rust_binary(name = "main",srcs = ["main.rs"],deps = [":greet"],
)cc_library(name = "greet",srcs = ["greet.c"],
)
配置一切就绪,现在可以构建了
$ bazel run //src:main
INFO: Analyzed target //src:main (151 packages loaded, 1341 targets configured).
INFO: Found 1 target...
Target //src:main up-to-date:bazel-bin/src/main
INFO: Elapsed time: 5.184s, Critical Path: 2.17s
INFO: 114 processes: 108 internal, 6 linux-sandbox.
INFO: Build completed successfully, 114 total actions
INFO: Running command line: bazel-bin/src/main
Hello, world!
//src:main src是指软件包,一般指目录下有BUILD.bazel的目录,main则是BUILD.bazel定义的构建任务,具体见https://bazel.build/concepts/labels?hl=zh-cn