【问题标题】:Override build script for a dependency覆盖依赖项的构建脚本
【发布时间】:2019-02-21 02:12:00
【问题描述】:

我正在构建一个 Rust 板条箱,它对一些包装原生库的 *-sys 板条箱具有传递依赖。 *-sys crates 使用 build.rs 用 cmake 构建本机库,我的环境不支持。

我已经在我的项目树的其他地方预构建了这些本地库。我想override the build scripts 不运行,而是使用现有的本机库。

如果清单包含链接键,则 Cargo 支持覆盖使用自定义库指定的构建脚本。此功能的目的是防止完全运行有问题的构建脚本,而是提前提供元数据。

要覆盖构建脚本,请将以下配置放在任何可接受的 Cargo 配置位置。

[target.x86_64-unknown-linux-gnu.foo]
rustc-link-search = ["/path/to/foo"]
rustc-link-lib = ["foo"]
root = "/path/to/foo"
key = "value"

来源:Cargo Reference > Build Scripts

根据该文档,我最初的猜测是我只需要在声明依赖项时添加rustc-link-lib,但这似乎不起作用。

[package]
# ...

[dependencies]
# ...
harfbuzz-sys = { version = "0.3", rustc-link-lib = ["harfbuzz"] }
# ...

Cargo 仍然尝试调用 build.rs 并失败。

对于我的项目中的所有传递依赖项,是否有正确的方法来覆盖 harfbuzz-sysbuild.rs

【问题讨论】:

    标签: rust rust-cargo


    【解决方案1】:

    您需要将覆盖信息放入Cargo configuration files 之一。例如harfbuzz-sys,您可以将其放入您工作区中的.cargo/config

    [target.machine-vendor-os.harfbuzz]
    rustc-link-search = ["/path/to/staging/usr/lib"]
    rustc-link-lib = ["harfbuzz"]
    

    注意第一行:

    • machine-vendor-os 必须与您使用 --target 选项赋予 cargo 的值相同。
    • harfbuzz 必须与 your dependency's Cargo.toml 中定义的 links 键相同。

    在第二行,/path/to/staging/usr/lib 是您的预编译依赖项在构建系统上所在的路径。

    【讨论】:

      猜你喜欢
      • 2014-03-18
      • 2012-02-27
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多