当前位置: 首页 > 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.hskmm.com/?act=detail&tid=17264

相关文章:

  • 9.24(补)
  • 9月25号
  • CCF CSP-J 2025_from_黄老师_d
  • 亚马逊与AWS如何通过漏洞赏金计划构建深度安全防御
  • sync.pool 面试题
  • 【JavaEE】SpringIoC与SpringDI - 详解
  • 24.Linux硬盘分区管理 - 详解
  • CCF CSP-J 2025_from_黄老师_km
  • AI一周资讯 250918-250925
  • 云栖小镇现场追踪!触摸AI 未来
  • AT_arc154_d [ARC154D] A + B C ?
  • SQL注入-联合注入
  • JVM对象创建与内存分配
  • 目录
  • 交互:在终端中输入用户信息
  • 电脑迁移技巧:适用于 Windows 10/11 的免费磁盘克隆优秀的工具
  • Java学习日记9.18
  • 一种CDN动态加速首次访问加速方法
  • 9.25
  • 字典
  • CF1716题解
  • 使用vosk模型进行语音识别
  • AI Agent如何重塑人力资源管理?易路iBuilder平台实战案例深度解析
  • docker-compose + macvlan + Elasticsearch - 9.1.4 + Kibana - 9.1.4
  • WinForm 计时器 Timer 学习笔记
  • RocketMQ入门:基本概念、安装、本地部署与集群部署 - 详解
  • 【LeetCode】122. 买卖股票的最佳时机 II
  • VSCode 使用技巧笔记
  • 【LeetCode】55. 跳跃游戏
  • Ansible + Docker 部署 Apache Kafka 3.9 集群