gpt4 book ai didi

rust - 覆盖依赖项的构建脚本

转载 作者:行者123 更新时间:2023-11-29 08:04:45 26 4
gpt4 key购买 nike

我正在构建一个 Rust crate,它对一些包装 native 库的 *-sys crate 具有传递依赖性。 *-sys crate 使用 build.rs 通过 cmake 构建 native 库,这在我的环境中不受支持。

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

If a manifest contains a links key, then Cargo supports overriding the build script specified with a custom library. The purpose of this functionality is to prevent running the build script in question altogether and instead supply the metadata ahead of time.

To override a build script, place the following configuration in any acceptable Cargo configuration location.

[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

最佳答案

您需要将覆盖信息放入 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 是您的预编译依赖项在构建系统中所在的路径。

关于rust - 覆盖依赖项的构建脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54798172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com