我正在构建一个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}}的所有传递依赖项?
答案 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
是您的预编译依赖项在构建系统上的路径。