我正在尝试为C ++库cryptominisat创建Rust绑定。实际代码有效,但我不确定如何正确地将其与Cargo打包。
git存储库看起来像
src/
c++ code here
.gitignore
readme, etc.
我添加了一个rust
目录,并在其中创建了我的货物项目
rust/
cryptominisat/
Cargo.toml
build.rs
src/
rust code here
src/
c++ code here
.gitignore
readme, etc.
不幸的是,cargo package
似乎并不打算在rust / cryptominisat目录之外打包任何东西,这意味着它不包含实际构建库所需的C ++代码。我能做什么?如果可以避免,我不想将整个存储库移动到rust
目录中,因为这样就无法合并到上游。
答案 0 :(得分:2)
它通常解决的方式:
使用git子模块(或发布前运行的脚本)在Rust仓库中嵌入C ++仓库的副本(例如在rust/cryptominisat/vendor/
中)。在开发过程中,您可以使用符号链接来避免使用两个C ++代码副本。
使用build.rs
在构建时下载tarball / clone / rsync代码。您可以将其转储到Cargo指定的OUT_DIR
env var中,以避免污染用户可见的目录。
使C ++代码成为系统级库。 Rust包不会构建它,但是期望它已经安装,只搜索它并为它指定链接标志。这就是大多数*-sys
包装箱的工作方式。