当前位置: 首页 > news >正文

Rust/C/C++ 混合构建 - 用Bazel构建Rust与C

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

http://www.zskr.cn/news/11789.html

相关文章:

  • sync.pool 面试题
  • 深入解析:SpringBoot与反射
  • 云栖小镇现场追踪!触摸AI 未来
  • 实用指南:【JavaEE】多线程案例(一)
  • Java学习日记9.18
  • AI Agent如何重塑人力资源管理?易路iBuilder平台实战案例深度解析
  • docker-compose + macvlan + Elasticsearch - 9.1.4 + Kibana - 9.1.4
  • WinForm 计时器 Timer 学习笔记
  • 深入了解一波JVM内存模型
  • CCPC2024-Zhengzhou G Same Sum(线段树)
  • CDN中使用边缘函数实现自定义编程
  • 敏捷开发的几个阶段
  • 实战:基于 BRPC+Etcd 打造轻量级 RPC 服务 —— 从注册到调用的完整实现 - 教程
  • 【2025最新】ArcGIS 点聚合功能实现全教程(进阶版) - 实践
  • 徐霞客的《青云志》
  • 运营商 API 安全最佳实践、案例与方案推荐(2025)|千万级接口的全链路实战
  • 使用trace进行排查网络瓶颈
  • JavaEE 导读与环境配置 - 实践
  • 实用指南:uniapp x鸿蒙开发之运行到鸿蒙模拟器
  • Redis 监听过期Key - 指南
  • 为什么我选择了 PSM 敏捷认证?
  • 编写msyql8.0.21 数据库批量备份脚本
  • ArcGIS 不重叠且无缝的拓扑检查和修改
  • 2025/9/25
  • 读书笔记:揭开索引的两个常见误区
  • 获取用户ip所在城市
  • 完整教程:JRE、JDK、JVM 及 JIT 之间有什么不同?
  • 微波雷达模块在智能家居中的具体应用案例有哪些?
  • 三分
  • 完整教程:微服务基础2-网关路由