我正在构建一个 Rust crate,它对一些*-sys包装本机库的crate 具有传递依赖关系。该*-sys包装箱采用build.rs建立与CMake的,这是不是我的环境中支持的机库。
我已经在我的项目树的其他地方预建了这些本地库。我想覆盖构建脚本以使其不运行,而是使用现有的本机库。
如果清单包含 links 键,则 Cargo 支持覆盖使用自定义库指定的构建脚本。此功能的目的是防止完全运行有问题的构建脚本,而是提前提供元数据。
要覆盖构建脚本,请将以下配置放置在任何可接受的 Cargo 配置位置。
Run Code Online (Sandbox Code Playgroud)[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"] }
# ...
Run Code Online (Sandbox Code Playgroud)
Cargo 仍然尝试调用build.rs并失败。
是否有正确的方法来覆盖我项目中所有可传递依赖项的harfbuzz-sys's build.rs?
您需要将覆盖信息放入Cargo 配置文件之一。例如harfbuzz-sys,您可以将其放入.cargo/config您的工作区中:
[target.machine-vendor-os.harfbuzz]
rustc-link-search = ["/path/to/staging/usr/lib"]
rustc-link-lib = ["harfbuzz"]
Run Code Online (Sandbox Code Playgroud)
注意第一行:
machine-vendor-os必须与您使用--target选项赋予货物的价值相同。harfbuzz必须与您的依赖links项中定义的键相同。Cargo.toml第二行/path/to/staging/usr/lib是预编译依赖项在构建系统上的路径。
| 归档时间: |
|
| 查看次数: |
596 次 |
| 最近记录: |