SuperAPI AI 工具集

rust-impl-build-scripts

编程与开发

查看项目

更新于 10-15 22:18

技能介绍

用途:指导编写 Cargo 的 build.rs 构建脚本。它在包编译前由 Cargo 编译并运行,通过向 stdout 打印 cargo::KEY=VALUE 行与 Cargo 通信;非 cargo:: 前缀的行会被静默丢弃,非零退出会中止构建。脚本依赖来自 [build-dependencies],不能使用 crate 的运行时依赖。

主要能力:读取 Cargo 提供的环境变量(OUT_DIR、CARGO_MANIFEST_DIR、TARGET、HOST、PROFILE、CARGO_CFG_TARGET_、CARGO_FEATURE_、DEP_<LINKS>_<KEY> 等);输出 rerun-if-changed / rerun-if-env-changed 控制重建;用 rustc-cfg、rustc-cfg=KEY="VAL"、rustc-env、rustc-check-cfg 影响编译;用 rustc-link-lib、rustc-link-search、rustc-link-arg 链接原生库;用 cargo::warning=、cargo::error= 输出诊断。

典型用法:向 $OUT_DIR 生成 .rs 文件并用 include!(concat!(env!("OUT_DIR"), "/ops.rs")) 引入;用 cc crate 编译 C 库并在 [package] 声明 links;用 bindgen 生成绑定并配合 CargoCallbacks::new();做平台/特性探测后设置 cfg;用 git 命令嵌入提交信息。

限制与注意:脚本内应通过 env::var("CARGO_CFG_TARGET_OS") 判断目标平台,不能用 cfg! 宏;一旦打印任一 rerun-if-changed 就退出默认“任意文件变更即重跑”的行为,需覆盖全部输入;每个 rustc-cfg 应配 rustc-check-cfg(Rust 1.80+);生成代码应写入 OUT_DIR 而非 src/;避免在 rustc-link-search 中硬编码绝对路径;不要用 eprintln! 代替 cargo::warning=。验证可用 cargo build -vv 查看指令,cargo clean -p 强制重跑。