代码之家  ›  专栏  ›  技术社区  ›  Antimony

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

  •  1
  • Antimony  · 技术社区  · 8 年前

    我正在尝试为C++库加密软件创建Rust绑定。实际的代码可以工作,但我不知道如何用Cargo正确地打包它。

    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++代码。我能做什么?我不想将整个存储库移动到 目录,因为这将使上游合并成为不可能。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Kornel    8 年前

    通常的解决方法是:

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

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

    • 使C++代码成为系统级库。Rust包不会构建它,但希望它已经安装,只搜索它并为其指定链接标志。这就是为什么 *-sys 板条箱可以工作。