我正在构建一个对少数*-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-sys
的build.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
是您预先编译的依赖性位于构建系统上的路径。