gpt4 book ai didi

rust - 如何用Cargo从项目目录外打包源码?

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

我正在尝试为 C++ 库 cryptominisat 创建 Rust 绑定(bind)。实际代码有效,但我不确定如何将其与 Cargo 正确打包。

git 仓库看起来像

src/
c++ code here
.gitignore
readme, etc.

我添加了一个 rust 目录,并在其中创建了我的 Cargo 项目,就像这样

rust/
cryptominisat/
Cargo.toml
build.rs
src/
rust code here
src/
c++ code here
.gitignore
readme, etc.

不幸的是,cargo package 似乎不想打包 rust/cryptominisat 目录之外的任何东西,这意味着它不包含实际构建库所需的 C++ 代码。我能做些什么?如果可以避免的话,我不想将整个存储库移动到 rust 目录中,因为那样将无法合并上游。

最佳答案

一般的解决方式:

  • 使用 git 子模块(或发布前运行的脚本)将 C++ 存储库的副本嵌入到 Rust 存储库中(例如,在 rust/cryptominisat/vendor/ 中)。在开发期间,您可以使用符号链接(symbolic link)来避免拥有两份 C++ 代码。

  • 使用 build.rs 在构建时下载压缩包/克隆/rsync 代码。您可以将其转储到 Cargo 指定的 OUT_DIR env var 中,以避免污染用户可见的目录。

  • 使 C++ 代码成为系统级库。 Rust 包不会构建它,但期望它已经安装,并且只搜索它并为它指定链接标志。这就是大多数 *-sys crate 的工作方式。

关于rust - 如何用Cargo从项目目录外打包源码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38417244/

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