如何使用Cargo从项目目录外部打包源代码?

时间:2016-07-17 01:57:22

标签: rust rust-cargo

我正在尝试为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目录中,因为这样就无法合并到上游。

1 个答案:

答案 0 :(得分:2)

它通常解决的方式:

  • 使用git子模块(或发布前运行的脚本)在Rust仓库中嵌入C ++仓库的副本(例如在rust/cryptominisat/vendor/中)。在开发过程中,您可以使用符号链接来避免使用两个C ++代码副本。

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

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