覆盖构建脚本以获得依赖性



我正在构建一个对少数*-sys板条箱包装本机库的依赖性的锈蚀箱。*-sys板条板使用build.rs用CMAKE构建本机库,这在我的环境中不支持。

我已经在项目树中其他地方预先建立了那些本地库。我想覆盖构建脚本以不运行,而是使用现有的本机库。

如果清单包含一个链接密钥,则货物支持用自定义库指定的构建脚本的覆盖。此功能的目的是防止完全以相关的构建脚本运行构建脚本,而是提前提供元数据。

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

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

来源:货物参考>构建脚本

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

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

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

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

您需要将覆盖信息放入其中一个货物配置文件中。例如,对于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必须与依赖关系Cargo.toml中定义的links密钥相同。

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

最新更新