如何链接本地的 Rust 库?(类似于 npm link)

19

在Node.js中开发库时,如果你想要针对本地存在的库进行开发,在运行npm publish之前,你可以使用npm link /path/to/other/node_library

那么在Rust中,相当于这个操作是什么呢?如何创建一个链接到bar库的foo可执行文件,而不必先将bar库推送到git远程?

官方Rust教程展示了如何使用原始的rustc来完成此操作,但是如何在Cargo.toml中实现呢?

(Cargo文档向你展示了如何构建库,但没有展示如何链接到没有远程仓库的库。)


请查看 https://dev59.com/XFwY5IYBdhLWcg3wFkej#33025972。 - Ryan
3个回答

6

如果你的依赖项在本地 git 存储库中,也可以使用 git 的 file: URL:

[dependencies.local_dep]
git = "file:/some/local/path"

如果您想使用自己本地的某个软件包,还有一个非常有用的功能。您可以在~/.cargo/config文件中指定该软件包的路径:

package-name = "/path/to/package"

通过这个配置,当某个其他包(我们称之为a)需要package-name时,无论在a清单中声明了什么关于package-name的位置,package-name都将从此配置文件中指定的源代码树构建。当您需要测试您对某个库的更改时,这很有用,而其他项目依赖于该库。


感谢您的回答,但是当本地依赖项和链接到它的可执行文件链接到相同的第三方依赖项时,这两个建议都不起作用。运行cargo update时会出现错误:目前,Cargo仅支持特定软件包名称的单个源(Dependency {name:nickel,source_id:https://github.com/nickel-org/nickel.rs.git,req:*,transitive:true,only_match_name:false})。 - bguiz
2
我相信package-name现在更名为paths,根据http://doc.crates.io/config.html#configuration-keys的文档,它是一个数组。 - Fraser

3

感谢您的回答,但是当本地依赖项以及链接到它的可执行文件与同一第三方依赖项链接时,这个建议无法工作。在运行 cargo update 时我会收到一个错误消息:目前,Cargo仅支持特定软件包名称的单个源(Dependency { name: nickel, source_id: https://github.com/nickel-org/nickel.rs.git, req: *, transitive: true, only_match_name: false }) - bguiz
这是关于“路径”的官方Cargo文档,链接在此:http://doc.crates.io/guide.html#path-dependencies。 - emlai

0

http://doc.crates.io/manifest.html#the-dependencies-section 包含一个使用 path 字段(geometry crate)的示例:

[package]
# ...

[dependencies]
hammer = { version = "0.5.0", git = "https://github.com/wycats/hammer.rs" }
color = { git = "https://github.com/bjz/color-rs" }
geometry = { path = "crates/geometry" }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接