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

news/2025/9/25 19:24:27/文章来源:https://www.cnblogs.com/linyihai/p/19111837

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.mzph.cn/news/917419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9.24(补)

上午离散数学学的有点意思,下课后看了一眼,马哲的老师讲的也挺有意思的,重点讲了会生产力和生产资料,下午到没干什么,躺了。

9月25号

上午进行了程序语言和数据结构。 然后进行了篮球课。 下午进行了乒乓课。

有什么好的设计网站自己怎做网站后台

所谓关联式容器,观念上类似关联式数据库(实际上则简单许多):每笔数据(每个元素)都有一个键值(key)和一个实值(value) 2。当元素被插入到关联式 容器中时,容器内部结构(可能是RB-tree,也可能是hash-table)便依照其键 值大小,以某种…

南昌市新农村建设网站聊城专业网站设计公司

小A是一名刚刚毕业的算法工程师,有一天,他被老板安排了一个活,要对一批合同扫描件进行自动化信息抽取,输出结构化的分析报表。OCR问题不大,但是怎么进行批量的结构化信息抽取呢?小A陷入了苦苦思索… 小B是…

CCF CSP-J 2025_from_黄老师_d

2025 CCF CSP-J 入门级(C++)第一轮试题解析 一、单项选择题(每题2分,共30分) 1. 32位无符号整数最大值问题答案:A 分析:32位无符号整数的取值范围是0到(2{32}-1)。计算可得(2=4294967296),则(2^{32}-1 = 42949…

亚马逊与AWS如何通过漏洞赏金计划构建深度安全防御

本文介绍亚马逊和AWS如何通过HackerOne平台的漏洞赏金计划,与全球安全研究人员合作持续测试平台安全性,保护客户数据并促进知识共享,展现企业级安全防御的最佳实践。HackerOne客户案例:亚马逊与AWS 对于亚马逊和AW…

GEO技术详解:从基础到实践的生成式引擎优化指南 - 指南

GEO技术详解:从基础到实践的生成式引擎优化指南 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

详细介绍:锚定效应(解释+类型区分+商业及生活应用+如何避免)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站开发招聘 领英电子商务考研最佳方向

搭建: canal部署与实例运行 数据库读log同步用 详见下面

sync.pool 面试题

什么是sync.Pool?它的主要设计目的是什么? sync.Pool 是 Go 语言标准库 sync 包中提供的一个对象池工具,用于缓存临时对象,减少内存分配和垃圾回收(GC)的压力。 它的核心设计目的是:复用对象:通过缓存暂时不用…

【JavaEE】SpringIoC与SpringDI - 详解

【JavaEE】SpringIoC与SpringDI - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

24.Linux硬盘分区管理 - 详解

24.Linux硬盘分区管理 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

CCF CSP-J 2025_from_黄老师_km

下面把 2025 CCF CSP-J 第一轮(入门级)C++ 试题 中 所有可辨认的选择 / 判断 / 填空 按题号逐一给出:正确答案 极简解析(why) 易错点 / 知识彩蛋【单选题】(每题 2 分,共 30 分)题号 答案 秒懂解析1 D 科学计数…

个人cms网站凡科做的网站打不开

面向对象和面向过程的区别? 面向对象编程(OOP)和面向过程编程(POP)是两种不同的编程范式,它们之间有一些重要的区别: 思想方式: 面向对象编程:将问题看作是一组对象之间…

网站flash代码成立公司一年需要多少费用

目录简介数据手册接口简单 I/OXBus简单 I/O 对比 XBus语言参考程序结构注释标签寄存器accdatp0、p1、x0、x1、x2、x3null 伪寄存器指令操作数确保进行足够的睡眠 (slp)!基本指令算法指令条件指令隐藏指令游戏界面DIY版本: 简介 以下介绍摘自未来软件园 …

AI一周资讯 250918-250925

原文: https://mp.weixin.qq.com/s/6_sSbUDYOujOjeF-n1rnGA 行业首个“高刷”视频理解多模态模型!MiniCPM-V 4.5凭三大技术成30B以下最优开源 本周,由清华大学自然语言处理实验室和面壁智能联合开发的MiniCPM-V 4.5亮…

深入解析:SpringBoot与反射

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

云栖小镇现场追踪!触摸AI 未来

原文: https://mp.weixin.qq.com/s/-jkeIywNb1alCajgZveSSw 9 月 24 日的杭州云栖小镇,人山人海 ——2025 云栖大会。作为每年必蹲的科技盛会,今年大会的主题 “云智一体・碳硅共生” 可不是空口号。走在 4 万平方米…

刚入手一手房怎么网上做网站Wordpress如何创建菜单

edge浏览器扩展插件中心10月发布 可直接安装Chrome扩展 Windows 10的全新浏览器Edge收获了不少好评,我们也知道它将在今年秋天迎来扩展程序的支持。 Mashable已经指出,微软将保证Edge上的扩展严控权限、卸载干净,保证不拖累整体性能&#x…

济南网站建设seo优化wordpress页面内

文章目录 python常用库之数据库orm框架之SQLAlchemy一、什么是SQLAlchemySQLAlchemy 使用场景 二、SQLAlchemy使用SQLAlchemy根据模型查询SQLAlchemy SQL 格式化的方式db_session.query和 db_session.execute区别实测demo 总结:让我们留意一下SQLAlchemy 的 lazy lo…