覆盖依赖项的构建脚本

时间:2019-02-21 02:12:00

标签: rust rust-cargo

我正在构建一个Rust板条箱,该板条箱对包装原始库的几个*-sys板条箱具有传递依赖。 *-sys板条箱使用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"] }
# ...

货物仍尝试调用build.rs并失败。

在我的项目中,是否有正确的方法可以覆盖harfbuzz-sys的{​​{1}}的所有传递依赖项?

1 个答案:

答案 0 :(得分:4)

您需要将替代信息放入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选项赋予货物的价值相同。
  • harfbuzz必须与your dependency's Cargo.toml中定义的links键相同。

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