十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

shadow-rs Hook 机制实战:如何向构建产物注入自定义常量与函数

shadow-rs Hook 机制实战:如何向构建产物注入自定义常量与函数 shadow-rs Hook 机制实战如何向构建产物注入自定义常量与函数【免费下载链接】shadow-rsA build-time information stored in your rust project.(binary,lib,cdylib,dylib,wasm)项目地址: https://gitcode.com/gh_mirrors/sh/shadow-rsshadow-rs 是一款在构建时build-time自动收集 Git、Cargo、环境变量与时间等信息并生成构建产物shadow.rs的 Rust 构建辅助工具。本文将带你实战 shadow-rs 的Hook 机制学会如何通过build.rs向构建产物注入自定义常量与自定义函数让编译出的二进制自带你的专属信息全程无需手写模板代码。shadow-rs 从 Git、Rust Cargo、Env、Time 四大来源收集信息如上图所示默认就能生成VERSION、BRANCH、COMMIT_HASH、BUILD_TIME等几十个内置常量。但项目常常还有「专属需求」比如注入自定义 license、签名、编译人信息——这就是 Hook 机制的用武之地。Hook 机制核心原理一段写入文件末尾的代码理解 Hook 之前先看一条完整链路build.rs调用ShadowBuilder生成OUT_DIR/shadow.rs再通过shadow!(build)宏在运行时引入。Hook 就是这条链路的「加塞入口」构建脚本完成默认常量写入后会执行你注册的闭包把自定义内容追加到 shadow.rs 末尾。相关实现可参考ShadowBuilder::hook 注册方法Shadow 生成文件时执行 hookHookExt trait 定义第一步修改 Cargo.toml 启用构建脚本Hook 依赖构建脚本先在你的Cargo.toml中声明build build.rs并把 shadow-rs 同时加入 dependencies 和 build-dependencies[package] build build.rs [dependencies] shadow-rs 0.3 [build-dependencies] shadow-rs 0.3第二步创建 build.rs 注册 Hook 函数在项目根目录新建build.rs通过.hook()传入一个接收File的闭包往文件里写入自定义常量与函数use std::io::Write; fn main() - shadow_rs::SdResult() { shadow_rs::ShadowBuilder::builder() .hook(|f| { writeln!(f, r#pub const HOOK_CONST: str hello hook const;#)?; writeln!(f, r#pub fn hook_fn() - static str {{ hello hook bar fn }}#)?; Ok(()) }) .build()?; Ok(()) }写入的常量、函数会被原样追加到构建产物末尾随后即可在 Rust 代码中直接使用。第三步在 main.rs 中使用注入的自定义常量与函数使用shadow!宏引入生成的build模块然后像调用普通常量一样访问你注入的内容use shadow_rs::shadow; shadow!(build); fn main() { println!(const:{}, build::HOOK_CONST); // hello hook const println!(fn:{}, build::hook_fn()); // hello hook bar fn }完整可运行示例见 example_shadow_hook/src/main.rs 及其 Cargo.toml克隆仓库后执行cargo run即可看到注入的常量与函数被正确打印。进阶技巧Hook 与 deny_const 组合使用Hook 还能与deny_const禁止项、BuildPattern构建模式自由组合例如先屏蔽不需要的内置常量再注入自定义字段构建产物体积更小、内容更聚焦。构建模式还支持RealTime确保每次提交代码后常量即时更新适合 CI/CD 场景。总结shadow-rs 的 Hook 机制让「构建产物定制」变得极其简单一个闭包 几行writeln!就能注入任意自定义常量与函数且与内置信息天然共存。无论是注入许可证、构建机器标识还是自定义版本函数Hook 都是优雅的扩展入口值得每个 Rust 项目一试。【免费下载链接】shadow-rsA build-time information stored in your rust project.(binary,lib,cdylib,dylib,wasm)项目地址: https://gitcode.com/gh_mirrors/sh/shadow-rs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表