如何用Cargo从项目目录外打包源码?
How to package source code from outside the project directory with Cargo?
我正在尝试为 C++ 库 cryptominisat 创建 Rust 绑定。实际代码有效,但我不确定如何将其与 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/
).在开发期间,您可以使用 symlink 来避免拥有两份 C++ 代码。
使用 build.rs
在构建时下载 tarball/clone/rsync 代码。您可以将其转储到 Cargo 指定的 OUT_DIR
env var 中,以避免污染用户可见的目录。
使C++代码成为系统级库。 Rust 包不会构建它,但期望它已经安装,并且只搜索它并为它指定 link 标志。这就是大多数 *-sys
板条箱的工作方式。
我正在尝试为 C++ 库 cryptominisat 创建 Rust 绑定。实际代码有效,但我不确定如何将其与 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/
).在开发期间,您可以使用 symlink 来避免拥有两份 C++ 代码。使用
build.rs
在构建时下载 tarball/clone/rsync 代码。您可以将其转储到 Cargo 指定的OUT_DIR
env var 中,以避免污染用户可见的目录。使C++代码成为系统级库。 Rust 包不会构建它,但期望它已经安装,并且只搜索它并为它指定 link 标志。这就是大多数
*-sys
板条箱的工作方式。