我如何使用Cargo构建一个库作为rlib和dylib但具有不同的内容?

时间:2016-11-09 19:45:43

标签: rust rust-cargo

我想制作一个包含以下内容的项目:

  • 图书馆
  • C
  • 的绑定
  • 使用库的可执行文件

目录结构,不包括临时文件和其他垃圾:

cargo build

我希望c_bindings.rs这样做:

  • 构建将忽略c_bindings.rs
  • 的Rust库(rlib)
  • 将使用└── target └── debug ├── gost_stribog ├── libgost_stribog.rlib ├── libgost_stribog.so
  • 的C库(dylib)
  • 可执行

调试目录应为:

Cargo.toml

我的class Bird{ public: void init(); Bird();//constructor void foo();//its defined somewhere }; int _tmain(int argc, _TCHAR* argv[]) { std::vector <Bird> B(51); // fixed line for (int i = 0; i < 51; i++) B[i].foo(); } 应该是什么样的?

1 个答案:

答案 0 :(得分:4)

意见回答:不要

相反,将代码拆分为两个或三个独立的包:

  1. 核心库。
  2. 图书馆的C绑定。
  3. (可选)可执行文件。
  4. 然后,将您的c_bindings.rs移动到绑定包只为lib.rs。它可以依赖于核心库。您还可以将main.rs移动到另一个也取决于核心库的包中。

    这三个包可以在同一个源代码库中,但是将使用单独的调用构建。

    A Cargo workspace可能证明是有用的;实际上它被列为一个明确的理由(“FFI箱子与FFI绑定的子板箱”)。